Improve formatting of login error messages
Don't allow fetch_person to throw errors

This ensures that missing optional fields don't prevent a Person from being
returned.
Make login_user a member of LoginProvider

However, still export it from the module for testing purposes.
Only export necessary symbols from the 'security/views' module
Ensure that a user's missing external_id is saved for subsequent use
Only attempt to store a post-login redirect if it was explicitly requested

Otherwise, the post-login redirect will be to the internally-set default
location ("/sessions").

This simplifies the OAuth workflow in the typical case.
Switch Google login from OpenID to OAuth2

Google has deprecated their OpenID service and will eventially
discontinue providing it.

Closes #33.
Merge branch 'login_improvements'

* login_improvements:
  Switch Google login from OpenID to OAuth2
  Only attempt to store a post-login redirect if it was explicitly requested
  Ensure that a user's missing external_id is saved for subsequent use
  Only export necessary symbols from the 'security/views' module
  Make login_user a member of LoginProvider
  Don't allow fetch_person to throw errors
  Improve formatting of login error messages