Architecture improvements

Close #153 Close #145 Close #146 

Specific pubsub system for communication between systems and entities.

A lock as been added to `EntityFilter`, you can use it when you are not sure its collection will be modified during iteration. Example : 

		EntityFilter::Lock lock(_filter);
		for (auto &&e : _filter.getCollection())
		{
			e->getComponent<Component::Bullshit>()->_t += t;
			if (e->getComponent<Component::Bullshit>()->_t > 0.55f)
				e->removeComponent<Component::Bullshit>();
		}