Moved the DerivativeClasses type above Regex, so we don't need to break Regex into several declarations anymore.
Updated command-line args for debugging.
Removed canonicalization code.
Implemented a Regex module with functions which serve as "smart" constructors -- they use simplification rules to ensure created Regexes are in a normalized form.
Modified compilation functions to use the new smart constructors instead of the normal constructors.
Implemented Regex simplification functions (i.e., rewrite rules).
Sort the regexes when creating And and Or regexes so we can use the compiler-generated structural equality function as an approximate equivalence test.
As of this commit, the simple example lexers seem to be compiled correctly and fsharplex seems quicker to do so, though it still bogs down when trying to compile the F# lexer.