Make ValidationCommandBus a decorator

We have a Single Responsibility Principle violation. Our command bus
attempts to implement new concern - command validation. But in addition
to doing that it also inherits original responsibility of
DefaultCommandBus.

Design patterns to the rescue! There is a wonderful design pattern that
suites such situations wonderfully well - Decorator. The core principle
of decorator is very simple - instead of extending class with basic
responsibility, we instead implement the same protocol (interface) that
base class implements:

    class DefaultCommandBus implements CommandBus
    class ValidationCommandBus implements CommandBus

making both classes implmenet same communication protocol. Next step is
composition. During construction of ValidationCommandBus we require
anything that implements our CommandBus interface:

    class ValidationCommandBus implements CommandBus {
        function __construct(CommandBus $bus, ...

to which we later delegate in custom ValidationCommandBus::execute:

    public function execute($command) {
        ...
        return $this->bus->execute($command);

This is "composition over inheritance". Because you compose your objects
in the runtime instead of coupling them in your codebase:

    $bus = new ValidationCommandBus(new DefaultCommandBus(...), ...);

Why is this implementation superior to version with inheritance? Well:

1. Because ValidationCommandBus does not depend on implementation of
   DefaultCommandBus, meaning you can change code of former any time
   without being afraid for horrible consequences.
2. Because it is much easier to explain, demonstrate and spec objects
   that have single responsibility over objects that inherit
   responsibilities from all over the system.
3. Because if you later want to introduce another responsibility to your
   bus, you still can do it:

       $bus = new LoggingCommandBus(
           new ValidationCommandBus(
               new DefaultCommandBus(...),
               ...
           ),
           ...
       )