Use ClassInfo instead of GrammarDefinition

This has the following advantages:

- Not having to manually define a type that differentiates
  our grammar elements saves a lot of code
  (run a 'git show --stat' on this commit)

- Not having an additional identifier element for each
  Token and ASTNode when you can just use ClassInfo saves on memory.
  Tokens and AST nodes automatically have their "GrammarDefinition"
  baked in - it's just the .classinfo property.

- It is assumed that you would want to create a class for each type
  of token and AST node you use.
  The 'asTerminal' and 'asNonTerminal' calls from GrammarElement
  are no longer needed (if they were in the first place)
  and can be replaced with a simple language feature - casts.
  You also get the benefit of casts supporting class hierarchies,
  though one probably shouldn't go full-Java and set up
  a token or AST node hierarchy eleventy billion classes deep.

GrammarElement is left as a
[marker interface](http://en.wikipedia.org/wiki/Marker_interface_pattern).
This is usually criticized inasmuch as a marker interface cannot be
"unimplemented" and can be replaced with annotations,
but in the future we may add common behavior to all GrammarElement classes.
We can keep an eye on it and return to this "issue" later.
Makefile now just compiles everything at once
Removed @safe and @trusted annotations
Attempt our first actual parse of tokens

So far we can parse an ID into an ID token.
This is a baby step but still allowed for lots of debugging.

Also commented the parser and reducer much better.