Changes from the 1.6.0 to 1.8.0
-------------------------------
** Improvement
    * [FELIX-2758] - Add post-registration and post-unregistration callbacks to the iPOJO API
    * [FELIX-2759] - The iPOJO API do not support contructor injection

Changes from the 1.4.0 to 1.6.0
-------------------------------
** Improvement
    * [FELIX-1427] - Service injection with Smart Proxies
    * [FELIX-1906] - Allow calling a method when service properties of an already injected service are modified
    * [FELIX-2268] - Simplify setting of properties.

** New Feature
    * [FELIX-2132] - Provides a way to control service exposition from the implementation class

Version 1.4.0
-------------

** Bug
    * [FELIX-965] - Avoid classloading issue if an already manipulated class is used by the API

** Improvement
    * Update parent pom
    * Initial commit


