Refactored to enforce entities are always valid.

Entities must now be built and modified with EntityBuilders/EntityModifiers respectively.
These operations can also be queued, allowing systems to perform them.
Queued builds or modifications are performed at the end of the update cycle.

A `reactivated` method has been added to traits/types that need to perform operations when an entity is modified.
Otherwise, activated is only called when the entity is created, and deactivated when it is deleted.