Stop raising every client error as `invalid_credentials`

When a user declines logging in with a certain provider, the `fail!` method will be called with the first argument as `"user_denied"`, `"access_denied"` or whatever error message the provider returns.

When a CSRF attack is detected, the `fail!` method will be called with the first argument as `"csrf_detected"`.

Fixes https://github.com/mkdynamic/omniauth-facebook/issues/124 and https://github.com/intridea/omniauth/issues/658 and https://github.com/reu/omniauth-steam/issues/8 and every other `omniauth-oauth2` gem.

Just for reference, here's the [`fail!` method][1].

Also, this method could probably use some surgery but all I did was put on a band-aid. Can't say I'm really proud of my code changes but hey, at least this works now.

[1]: https://github.com/intridea/omniauth/blob/master/lib/omniauth/strategy.rb#L463