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.