Add entity management

This allows client applications to use sohva as store for
entity/component system. It allows for quite flexible way of
representing data that may dynamically gain or lose roles.
The entity manager is responsible for creating and managing entities and
exposes an abstraction over the way it is actually stored.