Changes from 1.2.0 to 1.4.0
---------------------------
** Bug
    * [FELIX-994] - ClassCastException while Architecture on a composite with a provided service
     
** Improvement
    * Update parent pom

 
Changes from 1.0.0 to 1.2.0
---------------------------
** Bug
    * [FELIX-797] - Composite Architecture contains duplicate instances
    * [FELIX-817] - iPOJO Service Exported throw an error when stopping
    
Changes from 0.8.1 to 1.0.0
---------------------------
** Bug    
    * [FELIX-622] - iPOJO Composite Service Instance can use factories twice to create service instance
    * [FELIX-628] - Architecture service should not publish the instance.name property
    * [FELIX-637] - Composite service implementation does not support long argument 
    
** Improvement
    * [FELIX-673] - Provide OBR description to iPOJO bundles 
    * [FELIX-688] - Better error reporting when an instance creation failed 
    * [FELIX-689] - Instance 'name' property should become 'instance.name' 
    * [FELIX-716] - Provide XML schemas for iPOJO descriptors

Version 0.8.1
-------------
    * Initial release 
