MiddlewareChain should be a Middleware interface

As described in the documatation:

If, during ProcessRequest, a middleware returns a response or error, don't process the rest of the chain.

During ProcessResponse, only call the middleware that was called during ProcessRequest, and do it in reverse order.

Didn't see any tests for the equivalent functions in ObserverChain (ObserveRequest and ObserveResponse).