Use the new register-specific request token endpoint (https://github.com/matrix-org/matrix-js-sdk/pull/147) and catch the error that it gives if the email is already in use. Also add initial values to the registration form so we can reload it after the error without all the values disappearing, and split out the guest username parameter which was previously called defaultUsername.
Recaptcha is a special snowflake because it dynamically loads the script
and THEN renders with info from the registration request. This means we
need a back-channel for the UI component to 'tell' the stage that everything
is loaded. This Just Works which is nice.