Implement fetch() abort

- Add an optional |signal| property to RequestInit
- Add a |signal| property to Request, chained from RequestInit's signal
- Create a chained AbortSignal in Request clone()
- Add an Abort() method to FetchManager::Loader
- Add an AbortSignal parameter to FetchManager::Fetch()
- Add an AbortSignal member to FetchManager::Loader and BodyStreamBuffer

The implementation closely follows the Fetch standard, particularly the
initialisationn of |signal| in the Request constructor:
https://fetch.spec.whatwg.org/#request-class and the signal-related
steps in the fetch method: https://fetch.spec.whatwg.org/#fetch-method.

The AbortSignal member of BodyStreamBuffer is only set for Response
objects. It is not meaningful for Request objects. In addition, it is
not set when a Response is created from a stream, as there is no
associated Request that JS code could use to abort the response.

The design doc is at
https://docs.google.com/document/d/1OuoCG2uiijbAwbCw9jaS7tHEO0LBO_4gMNio1ox0qlY/edit.

The Intent to Ship thread is at
https://groups.google.com/a/chromium.org/d/msg/blink-dev/9vNZh4fhV2U/ZVxD2iQACgAJ.

Known issues: when abort is signaled between a body access method like
arrayBuffer() being called and the returned promise resolving, the
promise will reject with a TypeError rather than an AbortError.
See http://crbug.com/817687.

BUG=750599

Change-Id: I19dfb311f55fcdc566b07449ef2c61ef7be301c7
Reviewed-on: https://chromium-review.googlesource.com/934542
Reviewed-by: Kent Tamura <tkent@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Yutaka Hirano <yhirano@chromium.org>
Commit-Queue: Adam Rice <ricea@chromium.org>
Cr-Commit-Position: refs/heads/master@{#540095}
34 files changed