Add ability to abort request.

This injects a .abort() method into the request promise before it is returned
to the calling context. This will only work if the .timeout property is not
already being used. If the .timeout property is already being used, the .abort
method is no-op.