Main loop now calls all authenticators, not just the first successful one.
Authenticators decide on replacing the identified principal.
This was all authenticators can process the request and refresh tokens, tickets etc.
Refactored for clarity, added comments.
User credentials are now passed as an AuthenticationRequest class.
AuthenticationResponse takes AuthenticationRequest as a parameter.
Redirect URL logic added.
Project added to keystone login function.
Users are now associated with a project (tenant) by default.