Add basic support for interceptors

@JakeWharton @jhump @swankjesse 
as for @jhump's micro-optimization, that only works if the smaller set implements a fast `contains()` method: true for Set, not true for ArrayList.