Tolerate 98.9% code coverage

Coverage dropped slightly below 99% because in caching middleware there
is a code path that is only effective during parallelism, but it's not
trivial to setup parallel requests to exercise that scenario.
Enable RackCompatible specs on Rubinius

It used to be that those failed because of a Rubinius bug
https://github.com/rubinius/rubinius/issues/1522

But it's been 2 years since then, so assume that it's fixed.
Mark compatible with Faraday 0.9
Add Env compatibility layer to specs for Faraday 0.9

Ensures that middleware in tests receives a proper Faraday::Env instance
for Faraday 0.9, and a plain Hash for Faraday <= 0.8.
WIP monkeypatch to provide RequestOptions#preserve_raw
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.