Fleshed out a test parse

We are now succesfully parsing (and outputting a Graphviz file!)
of baz = foo + bar
Obviously more complexity will be added shortly,
but this is a great first step.

This commit did a bunch of stuff:

- Adds an abstract children property to AST nodes
  and provides mixins for a node with no children and a
  binary operation node.

- Fixes the reducer so that it accepts bases of a given class
  as types of that class using ClassInfo.base

- Comments the parser and reducer a bit more

- Uses the "is" operator in more places when comparing to null

- Minor other tweaks and fixes
Made GrammarElement an abstract class

Changing it form an interface to an abstract class means that
we don't have to cast elements to Object in order to get their
ClassInfo (since .classinfo on an interface gets the info for that
_interface_, not the actual object the variable points to).