Improve exception handling for proxy requests and downloads

Turns out that getOutputStream() wasn't coming from where I thought it was, so I wasn't able to eliminate those exceptions. However, I was able to stop the ClientAbortExceptions from being logged. This should clear up the logs files a fair bit.

See #1460 
The `TimeCategory`adds some extra behaviour to the Date class. In this case I am using it because it makes `Date - Date` return a nicely-formatted string. e.g. `1 hour, 35 minutes, 4 seconds`. You apply them using a `use` block which means that the extra behaviours on the Date class don't affect any parts of your application (or libraries) that rely on the default behaviour.