Make location a struct.

for usage in an equalp hashtable, sadly
Removes assert that may? not be necessary.
Catches unknown terminals instead of dying.
Parser: Now gives terminal arguments as their strings.
Lexer: Compile-time checking + minimal preprocessing.
Adds HAS-LOCATION by default to ASTs, and makes generated names a bit more sane.
Fixes location-from-list for when one isn't actually using locations.
location tracking in the parser
Fixed parser, finally.
fixes a couple warnings
Adds type annotation for more efficient generated code.