Move timeout from the incoming socket to the outgoing one.

The issue was that when setting a timeout it was only getting set on the incoming socket, not on the outgoing http request. So the incoming request would get closed but the error handler wouldn't run, and the outgoing request would remain open.

This PR moves the timeout from the incoming socket to the outgoing one, and aborts the request on a timeout. The result is that error callbacks will run on a timeout, and that outgoing http requests won't remain open.