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.
Should getOAuthResult be moved to an OAuthBroker. Brokers like the WebChannelBroker and RedirectBroker would be subclassed from it. We could then just call `self.broker.finishOAuthFlow(viewOptions)` and the broker would take care of the rest?

The negative part is generating an assertion depends on the assertionLibrary, which takes an FxaClient. FxaClient takes a broker. There would be a circular dependency unless we get creative?