Initial implementation of interceptors.

I'm anticipating implementing interceptors at two independent parts
of the API. The first is high-level interceptors, that intercept
before the socket connection has been established.

The second set of interceptors will only execute for requests that
require a socket connection. Those are forthcoming.
Why this over:
```java
interface Interceptor {
  Response intercept(Request request, Interceptor next);
}
```
?

Doesn't the use of this `Chain` abstraction require a bunch of temporary and arguably unneccessary objects created for every request?