New ErrorHandler middleware.

This middleware catches exceptions, logs them, and then re-executes the request to generate an error page. The request can be re-executed down the original pipeline with a modified request path, or down an alternate pipeline.  If anything goes wrong generating the response then the original exception will be re-thrown.

The re-execution will not be attempted if the response has already started.

@loudej @davidfowl @Eilon 
In this case, you'll have to add some clearing logic to [host-specific]Stream.Position, which doesn't feel very intuitive IMHO.

Why not simply exposing a new `Clear()` method on `HttpResponse` to let the host (or a MW that would take control of the response stream) clear the stream if it can be effectively cleared?