use Request.abort() to abort the request when the request has timed-out

This change will affect the behavior of request that has timed-out.
Now when a user is listening for the error event on a request and that request times-out,
The error handler will only be called once. The error given to the callback will be the timeout error.

Fixes: #304