Added EndCallbackInputStream for detecting the end of a stream from the outside.
Fixed HttpClient requests with a request body and using EndCallbackInputStream to free up response resources ASAP.

Before this, resources were freed by the GC finalizing the HttpResponse. This not only lead to a waste of open connections, but also caused InvalidMemoryOperationErrors because request finalization sometimes needs to allocate.

Requests with a request body sent parts of the request header twice, interleaved with the request body, causing a messed up protocol stream. A number of assertions now make sure that the fixed code is correct.