Fixes for chaining when using `for([mw1,mw2,...])`.

Chaining previously only set the context on the entire `for` block instead of the individual elements within it. We address the issue by ensuring that we prepare the context for a request only once, and that any middleware given is tagged as the original middleware and not some composed version. Additionally, any wrapped version of the middleware inherits the same context as the middleware itself.