Catch HTTP timeouts and other response errors appropriately

In node, if the HTTP request times out and the request object does not have a timeout or error handler, an exception is thrown. This patch adds an error response handler and a timeout of 60 seconds. A timeout will return a `ServerError` to the callback. Other response errors, like "socket hang up", will return an `UnexpectedError`.