feat($httpBackend): add support for timeout promises

If the timeout argument is a promise, abort the request when it is resolved.

This is yet another approach to the $http cancel issue (see #2452 and #2523). Obviously there is still a lack of consensus on how to handle it (see https://github.com/kriskowal/q/issues/64), so I propose this as an alternative.

Closes #1159