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;