Add basic support for interceptors

@JakeWharton @jhump @swankjesse 
I'm wondering if this is too framework-y. Maybe we should just add a method to Interceptor that takes a Message class and returns a boolean to say whether it is interested in receiving messages of that class. The MessageAdapter would cache the interceptors that return true for the particular Message type.

We could have a BaseInterceptor that implements a strategy like what's here now (checking for options) but you wouldn't be constrained to use it.