Yet again more potentially breaking fixes if you are using the Executor directly.
- Implement the `get_operation_ast` utility.
- Implement a way to get/set the default executor that is used when you call `graphql.core.graphql()` or `graphql.core.execute()`. You can do this by calling `graphql.core.executor.{get,set}_default_executor()`
- Add the option to specify `map_type` in the Executor. This change allows for you to specify what kind of Map you want to store your result data in. The two recommended options are:
- `dict` (the default). Use this when you don't care about result ordering. For example, you don't care that the order in the fields of your response match the order of the fields in your query. For most cases, this is correct and is the fastest option.
- [`collections.OrderedDict`](https://docs.python.org/2/library/collections.html#ordereddict-objects), when you pass something that is an OrderedDict, or a subclass of it, the executor will switch into "strict ordering" mode, which will make it so that the order of the results, match the order they were defined in the query. Concurrent execution will still execute out of order however if you are running a `Query` (but the results will still return in the correct order), you can override this by passing `execute_serially=True` to the executor (which is generally not needed. But exists incase you want to execute serially for whatever reason). Also, mutations will always execute serially.
You can use any other user implemented mapping type as long as it implements the [`MutableMapping`](https://docs.python.org/2/library/collections.html#collections.MutableMapping) abstract base type.
- The executor no longer takes `schema` in it's constructor. Instead pass this as the first argument to `Executor.execute()`.