Rejects promises when xhr fails

Currently if the XHR fails, the promise the overridden ```fetch()``` methods are returning is not rejected, causing any attached fail() handlers to not be called.

The proposed fix only handles rejecting a promise, but the same problem should exist for all other events a Promise needs to handle (is ```progress``` the only other one though?). The correct fix would be to somehow pipe all events from the XHR promise to the one we return on ```fetch()```. However before we find this solution piping ```fail``` is an important hotfix IMO.

On an unrelated note: is there any special reason why we're returning the full Deferred object instead of only its Promise subset? Is there a common need to manually resolve or reject promises in "user-land" (ie. after calling fetch in a View)?