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.
When you implement an interceptor that calls it, what do you pass as the 2nd argument to `next.intercept()` ?

Even with that, I'm expecting that `chain` will later have some context APIs. The `Connection` in particular.