if identity fails to be created, destroy the user. 

also, pass through identity errors to user and add identity class hook.

these changes are needed to better support custom hooks that remotely verify if username is available.

there are a lot of errors that can happen with a remote service, and we want to make sure we catch all possible errors and report something to the user.