Support adding a basic timeout to requests

I wanted to resolve #13.  Open to other approaches etc as JavaScript is not my strongest language.

- If the timeout is trigger req.abort() is called.
- Also had to add an extra listener to ensure that the standard callback
  is called even if the connection ends in an error.

/cc @cmingxu, @drdamour