systems support component needs declaration

A system can now define an array of components declaring its interest about Entities that possess that set of components

defining components ensures that systems are updated with a list of interesting entities in this.entities.
defining components + setupEntity methods ensures that world will call setupEntity every time an entity become interesting due to entity insertion or entity gaining the required set of components.
defining components + teardownEntity methods ensure that world will call teardownEntity every time an entity is no longer interisting due to entity removing or entity loosing some of the required components.