Add Commands
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`.
Move callback
Rename Commands to CommandHandlers
Add Command
Use command instances in command bus client (non-backward compatible)

CommandBusClient#executeCommand previously accepted a commandName and
an arguments parameters. It now accepts a single command instance
object (see Pu.Command).
Fix Assembler#tearDownApp()
Add more logging to Redis event bus
Bump redis

This fixes a serious bug on redisClient.end() that was preventing other clients from getting events.
Translate AggregateRoot from CS to JS
Translate Logger from CS to JS
Prevent command bus from registering two commands with same name
Add initial promise support to Entity
Translate Reporter from CS to JS
Translate Profiler from CS to JS
Fix CommandBusClient bug
Make commands accept only only payload argument (non-backward compatible)

Commands no longer accept a variable number of arguments. There is a single so-called payload attached to any commands that has properties on it. Buffer and binary data are still properly serialized on the wire for each property of that payload object.
Improve missing UID handling in Entity#findUid
Use Command objects internally

This might break code interacting directly with CommandBus#executeCommand.
Add support for command validation

CommandBus, CommandBusServer and CommandBusServer now support blocking validation on command handlers.

Simply expose a `validate()` method on your command handler. The execution of the command will not callback until `validate()` called back. The normal `run()` method is then run asynchronously, only with validation passed.

Validate methods should not raise any events. Even though it is run within a safe sequential transaction, its purpose is to avoid failing events in the domain. Triggering events in it would defeat this objective. If you see yourself triggering events in `validate()`, simply move that code to `run()`.

    var BuyBookCommand = require("../commands/buy_book_command");
    var Book = require("../models/book);

    var BuyBookCommandHandler = Pu.CommandHandler(BuyBookCommand, function (comand) {
      var payload = command.getPayload();
      this.bookUid = payload.bookUid;
    });

    BuyBookCommandHandler.prototype.validate = function (callback) {
      // do your validation dance...
      callback(); // raising an error in this callback will prevent
                  // run() from being called
    };

    BuyBookCommandHandler.prototype.run = function (callback) {
      // ...
      callback()
    };

    module.exports = BuyBookCommandHandler;