WIP: This parser just type checks, it hasn't even been tested manually. Check new tasks in the TODO file and the TODO comments in the code for more gotchas.
This includes a rough port of the data types at https://github.com/graphql/graphql-js/blob/master/src/language/ast.js