Generalized productions to take type parameters.

This took a massive revamping of the code, but I think it's for the better. The
class Grammar is now also parameterized, so it can parse ASTs that have labels
that aren't necessarily Strings. This eliminates the (pointless) requirement
that the programmer specify a startSymbol for Parsable objects. It also allows
us to use Grammar to parse grammars that don't necessarily come from Parsable
while giving us that type safety and flexibility that comes from using the
Parsable type directly in the AST.

That is, we've preserved the ability to create productions purely out of Strings
and just instantiate a few LexicalCategories and make parse trees that aren't
tied to programmatic objects or whatever.
fixed incorrect types in ParsableTestParameters
fixed one last little typo in test code