IEntityContainer, entities by type, data storage

* The interface IEntityContainer was added, with a default
implementation EntityContainer, to provide unified entity methods across
multiple containers (currently, Level and Layer).
* Level provides functions to get & count entities of specific types
(superclasses).
* The interface IDataStorage was added, with a default implementation
DataStorage, to allow objects to maintain custom properties. This is
currently only used by entities for storing their layer, if in a
LayeredLevel (replaces Entity.levelInformation).