Add basic support for interceptors

@JakeWharton @jhump @swankjesse 
But now the behavior is different whether I return `null` or an empty collection. And I would hope everyone whose implementing an interceptor empty collections instead of `null` for things which are not needed. If we aren't going to reject nulls we should be treating empty collections the same way (avoiding allocations and iterations).