Created an immutable HttpRequest class that encapsulates all request data including the POST/PUT streams.

RequestBuilder can now be safely reused, because it does not store the reference to a stream that would need rewinding - instead, this is stored in HttpRequest, which is single use in this case. When it does not store a data stream, the request can be reused as well.