Add some brokers

This is for @nchapman, @zaach, @vladikoff and @ckarlof. These are the first brokers, see what you think!

feat(client): Add some brokers!

* Start to add brokers that know how to startup/complete flows.
* 3 brokers to start, fx-desktop, redirect, web-channel.
* Get rid of the Channels high level abstraction, these are used directly by the brokers if needed.
* Move some code from service-mixin and various channels to brokers.
* Update tests to make use of the brokers.
I was thinking of something along these lines, but with a global pub/sub mechanism possibly, that way the producer of the message does not need to know about the broker?

```
pubsub.trigger('login', { ... });
```

and the broker would listen for login events and handles them appropriately:

```
pubsub.on('login', function (sessionInfo) { 
   // do something like ship a message to the browser or redirect here.
});
```