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 kept these separate because they are sufficiently different that it made sense to me. The web channel initialization is in particular different from the others since it must fetch the `webChannelId` from either the URL query parameters or from Session.oauth depending on whether the user is in the signin/signup flow, or whether they are verifying. The WebChannel broker also causes the "ready" page to automatically submit and redirect, whereas the other OAuth channels show the user the ready screen and require further interaction.

I'm open to other alternatives, so far all the ones I have thought of seem to result in distinct objects that do initialization/completion, which seems similar to sub-classing the OAuth broker.