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.
The names are confusing, I agree. 

You are touching on what I commented about [a few days ago](https://github.com/mozilla/fxa-content-server/pull/1609#discussion_r19158602). 

The goal is to allow for different actions based on the context is being run. The views do not always redirect. For instance, in this broker, neither the [afterSignIn](https://github.com/mozilla/fxa-content-server/pull/1609/files#diff-cdedc953ca0f16413bc416cdac0a5e0dR97) nor the [afterResetPasswordConfirmed](https://github.com/mozilla/fxa-content-server/pull/1609/files#diff-cdedc953ca0f16413bc416cdac0a5e0dR109) functions redirect to a new page when they are complete, to avoid a screen flash. The OAuth flows redirect back to the RP. The default broker redirects to those screens.

Adding a global pub/sub mechanism could work, if the brokers that do not redirect do not trigger the message that causes the screen transition. We could also continue with the current use of promises and return a status flag that says whether the broker handled the completion, or whether the view should take over.

Or, we could have the views set up to always redirect when the promise chain completes, but in the brokers that handle completion, prevent the promise chain from finishing by returning a promise that never resolves.