feat($http): add promise.cancel support

Implement the canceler option of `$q.defer` to allow interrupting requests.

Closes #1159

Depends on #2452 and #2503