Add basic support for interceptors

@JakeWharton @jhump @swankjesse 
I'm a little confused. It looks like this code is only running interceptors on top-level serialized objects. That means that nested messages don't get serialized or de-serialized. Or did I miss something?

As is, if you wanted to, say, encrypt fields for every messages with option "encrypted", you'd actually have to have a very complicated interceptor factory and interceptor that crawled the entire message structure to see if any component therein needs to be intercepted and then to copy an entire hierarchy in order to change some leaf encrypted component.

This seems painful.

BTW, if you change this to recursively handle nested messages, keep in mind that order matters: you need to pre-serialize bottom-up (e.g. run interceptors on nested messages before running interceptors on enclosing message) and post-serialize in the reverse order, top-down.