Make Entity able to emit domain events (non-backward compatible)

Entities are now the central items regarding domain events and
persistence. Previously, aggregate roots were the only objects to be
persistable and emitting events. This was too restrictive when it
comes to complex domain modelling and not following common principles.

To upgrade your app to these changes, do the following:

* Change all references to event.aggregateUid to event.entityUid.
* Think about your models. If some sof them houldn't be aggregate
  roots but need persistence, you can now inherit from Entity instead
  of AggregateRoot, get event and persistence support while attaching
  the right semantic to it.
* For existing databases, you'll have to update the indexes on the
  "events" and "snapshots" collections:

    db.events.dropIndexes()
    db.events.ensureIndex({"entityUid": 1})
    db.events.ensureIndex({"entityUid": 1, "version": 1}, { unique: true })
    db.snapshots.ensureIndex({"entityUid": 1})
* If you're calling the domain repository API directly (you probably
  should not), several methods were renamed. Basically, the word
  "aggregate" was changed to "entity"; e.g. `findAggregateByUid` is
  now `findEntityByUid`.