Add code to remove unnecessary states on DFA's

Currently highly untested - looks like it's high time for some unit
testing to be written.
Make refactors suggested by HLint
Add cabal file
Improve graph - merge transitions between 2 states

There can now only be one edge / transition between two states / nodes
on the graph displayed. If the DFA has multiple such transitions, group
them together. Furthermore, if the transitions correspond to a character
class, represent it as such.
Modify grapher to graph DFAs from lexers

Fix bug where nodes were duplicated.
Merge edges connecting to the same node
Allow approx. matching of classes on edge labels
Switch to PDF output for graph

Rendered file size is far smaller, possibly allowing for more complex
graphs to be displayed.
Allow graphing of both lexers and normal regexps
Merge branch 'master' into feature_compress

Conflicts:
	Reg.hs
	graph.hs
Fix compression, and allow visualization of ENFA's
Add tests

Lexer is still in a broken state
Add test case to test regexes rejecting strings

Fixed some problems in DFA/ENFA generation that this revealed, namely:
1. Always matching the empty string (introduced when allowing empty
   regexes).
2. Problems with the DFA compressor, which require more investigation.
Clean up build system
Fix bugs with DFA compression

Refactor tests and seperate into modules, add additional tests.
Refactor parsing, move parsing logic into Regulate.
Divide library into seperate files
Refactor, taking suggestions from HLint
Compile with -Wall and -Werror
Fix DFA compression on lexers

No longer merge states that represent different token types.
Add test cases for lexers.
Note: lexer test occasionally breaks for very large cases, should look
into this.