Rewrote parser generator as functor

Parser generator now consists of a module type Parse_gen_able
which includes all the type information needed to create a fully typed parser
generator, a module type P for fully typed parser generator (signature looks
a lot like the old signature of Parse_gen), and a functor
Make : Parse_gen_able -> P

To actually create a parser generator, just need to pass in
(a) the types of terminals, nonterminals, and lexemes
and
(b) some simple comparator / eof information

This allows us to create parser generators for grammars with all sorts of
different terminal / nonterminal / lexeme types easily. Great for testing!

By analogy with BatSet:
Parse_gen_able <-> BatSet.Ordered_type
P <-> BatSet.S
Make <-> BatSet.Make
Rewrote dummy code in main to call functor

Calls Parser_gen.Make on a pretty stupid input module, but good enough.