Allow the body input stream to be read multiple times [IMMUTANT-400]

We do that by wrapping it in an InputStream that dumps the body to a
file, then reads from that file when necessary. This wrapper stream
just resets the pointer within the file when closed. To free its
resources, hardClose() needs to be called after the request is
complete.