AbortController support (#4250)
This adds support for aborting execution from the outside or resolvers,
this adds a few tests and tries to make the support as easy as possible.
Do we want to support having abort support on subscriptions, I guess it
makes sense for server-sent events.
I've chosen 2 places to place these interrupts
- `executeFieldsSerially` - every time we start a new mutation we check
whether the runtime has interrupted
- `executeFields` - every time we start executing a new field we check
whether the runtime has interrupted
- inside of the catch block as well so we return a singular error, all
though this doesn't really matter as the consumer would not receive
anything
- this here should also take care of deferred fields
When comparing this to `graphql-tools/execute` I am not sure whether we
want to match this behavior, this throws a DomException which would be a
whole new exception that gets thrown while normally during execution we
wrap everything with GraphQLErrors.
Supersedes https://github.com/graphql/graphql-js/pull/3791
Resolves https://github.com/graphql/graphql-js/issues/3764
Co-authored-by: yaacovCR <yaacovCR@gmail.com>