Backport error/exception handling improvements
Cherry-picking compatible fixes and features from the master branch for v1.2.0:
- GraphQL parse errors should be much easier to read now.
- Exceptions in a single field should no longer fail the entire request, instead it'll accumulate multiple errors and return them along with whatever partial results it was able to retrieve in the data member.
- Refactored the operation definition visitors to share more code and expose a public method
findOperationDefinition
to figure out the operation type.