removes HasIdentity etc from User and implements promises to allow code to
run when the user's details are available.

also removes DetailsChanged, LoginFailed, Registered and RegistrationFailed -
DetailsChanged never made much sense (it's just LoggedIn or LoggedOut), same
with Registered (LoggedIn will fire).

for LoginFailed and RegistrationFailed, the code that calls login() or register()
can pass a fail-callback to the returned Promise's then().