Change EntitySet to keep a proper Set instead of an array

Moving to an internal Hash makes it easy to check for duplicates, find
Entities and Delete them. Append now returns whether the Entity was
successfully added to the set or not, letting users of this struct act
on if an Entity was already in the set.
Create constructor for EntityDB

EntityDB now needs to initialize it's own internal EntitySet so we can
no longer struct-initialize it.
Entities now have an Id, given to them by the EntityDB
Don't re-setup entities on listeners who already know of the Entity
Fix behavior tests to use new EntityDB constructor
Refactor and update a bunch of Entity related comments