feat(test): Add functional test for web channel flow when user signs up, closes original tab, and opens the verification link in the same browser.

This is to add additional coverage to prepare for the add-a-broker branch.

Additional work:
* Reduce duplication in the web channel tests by calling the fillOutSignUp and fillOutSignIn FunctionalHelpers.
Add FunctionalHelpers to fill out the (request) password reset and complete password reset forms.
feat(client): Add some brokers!

* Start to add brokers that know how to startup/complete flows.
* 5 brokers to start, base, oauth, 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.
* No longer save forceEmail to Session, get it from the relier.
* Remove the `signIn` from `completeResetPassword` in the FxaClient, this is now done in the views.
* No longer call `signIn` from `changePassword` in the FxaClient, this is now handled by the views. This allows the signature of `changePassword` to be much smaller.
* Move the re-link check from fxa-client to the views to allow finer grained control over when they are presented.
* Remove Session.forceAuth handling from fxa-client.js, this is now stored in relier.email
* Create a search-params mixin in models/mixins.
* Migrate signin/signup/verification finishing code from service-mixin to the brokers so each broker can do their own thing.
* Really shrink service-mixin to a bare bare minimum, fix the unit tests, make sure all the current functional tests pass.
* Extract a ChannelMixin for use by the brokers.
Rip out lots of functions from the broker that might not be needed.
fix(client): Ensure the Loop initiated reset password verification flow sends OAuth credentials after the reset password is complete when the original tab is closed.

fixes #1825