Monkeypatch to support `request: { preserve_raw: true }`

Faraday 0.9 doesn't support custom keys in RequestOptions. However, a
faraday_middleware feature allowed people to set this option with
earlier versions of Faraday.

For now, a monkeypatch is necessary to retain this compatibility.
Work around Faraday 0.9 query parsing incompatibility in OAuth2

The query string 'access_token&q=hello` gets parsed with the token value
`nil` in Faraday 0.8, but with value `true` in Faraday 0.9.

This is most likely a regression in Faraday, but for now, simply check
if an OAuth token quacks like a string before trying to treat it as one.
Make RackCompatible middleware compatible with Faraday 0.9

We can't reuse the same `env` hash between Rack and Faraday since
Faraday 0.9 operates with Faraday::Env object.

Solve this by maintaining two distinct `env` objects; one for Rack and
another for Faraday.
Update middleware registry for Faraday 0.9

The unified method `Faraday.register_middleware` for registering all
kinds of middleware was gone in 0.9.

https://github.com/lostisland/faraday/commit/14b458a9c971897f44d5ee3ba5354de52c998e72