Add and use a Composite system insted of populating composites in main.cpp

Composite System has the role to:
- register factories of systems (previously done in main.cpp)
- add composites to entities in ECS, wrapping the factory functions
- remove composites and dependent children from entities in ECS 
- store and maintain a set of composites and their associated entities under the form of a bitset
- store the dependency hierarchy of composites that declared a dependency at build time

A big change is that addition and removal of composites are asynchronous, i.e they are queued until the Update() function is called.

Note that Entity System still use the synchronous functions provided by FactorySystem since it stores the returned object. A fix is in progress.

Unit tests will be provided as soon as the issue on include path is fixed.