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.
(I was tempted to make `Chain` stateful, such that every interceptor got the same instance, and it kept track of its index based on a push/pop counter. But then I thought that that was too weird.)