Determine whether user exists in IdentityStore

Previously the OAuthManager deciding if a user existed based on what
happened when it asked the IdentityStore for a matching user.

In hindsight, this was a bad design decision, and it makes a lot more
sense for the IdentityStore itself to carry the responsibility of
knowing whether or not a user exists matching a given set of provider
details.

This is also the starting point for introducing an extension point
where the logic that decides whether or not to create a new user can be
swapped out if someone wanted to re-use an existing user if the emails
matched, or if they were trying to link two accounts.