introduce GraphQLField, GraphQLInputField, GraphQLArgument, and GraphQLEnumValue (#4288)
this extracts logic from #3044 and #3145 (later rebased as #3807 and
#3808) to implement more informative error messages without implementing
[the full schema coordinate
RFC](https://github.com/graphql/graphql-spec/pull/794)
This is a BREAKING CHANGE because these schema elements are now longer
plain objects and function differently in various scenarios, for example
with `String(<schemaElement>` `JSON.stringifu(<schemaElement>` and
`.toString()` and `.toJSON()`
---------
Co-authored-by: Jovi De Croock <decroockjovi@gmail.com>