Better segregation of responsibilities

- The chain know how to dispatch commands and holds on to the list of
commands.
- The chain maintains the list of commands and connects the commands
together using the syntactic sugar helpers.
- The command is a 'dumb' promise which can be given a dispatcher to
dispatch a command and proxy the results to the right callbacks.