refactor(client): Asynchronous rendering!

* Asynchronous can be used to check for prerequisites/errors before printing the template, preventing flashes of content before being fully ready.
* Only show the contents of the new screen once all async operations are complete.
* Add fxa-client.js->isSignedIn to check if a user is signed in with the given token.
* Move fxaClient creation from form.js into base.js so that authentication can be checked.
* Clean up base.js->render and the isSignedIn check.
* Update all the vew tests to expect async rendering.

issue #788
chore(client): Cleanup based on comments.

* Remove invalid comment
* Reorder functions to make review easier
feature(client): Check email verification tokens before rendering.

* update fxaClient.js->isPasswordResetComplete to take a token.
* Create separate template sections for error and success cases.

fixes #788
feature(client): Validate token, code and email in /complete_reset_password

* Add validate.js for a central place to do validation.
* Update form to validate email addresses using validate.js
* Add functional tests to check for different invalid inputs.
feature(client): More error handling for `/complete_reset_password`

* Validate emails, tokens, and codes.
* Create a generic `lib/validate.js` file with isEmailValid, isCodeValid and isTokenValid. Add tests.
* Handle expired tokens by giving the user an opportunity to resend the email.
* Add unit and functional tests for corner cases.
feature(client): Handle expired tokens in `/complete_reset_password`

* Re-show the same page which will allow the user to resend a verification email.
feature(client): More error handling for `/verify_email`

* Client side validation of uid and code
* Handle errors sent by the server that says uid or code is bad.
* Add unit and functional tests for these cases.