Subset construction

Alright, here's the pull request guys.

There were some problems with this merge though. Unfortunately, because those files were just copied over, the history got really weird and I had to do a forced merge, which basically means my changes bulldozed over yours Justin for `automata.py` and `scanner.py`. It will basically look like huge blocks of code have been added. Having said that, I think our changes were basically identical, but there might be some subtle changes we need to address.

Second, it looks like the new Hofcroft files didn't actually get pushed. At least, I couldn't find them anywhere. We should probably commit those after this request.
I think there is an algorithm that switches the start states with the end states in which case we need the ability to have multiple start states. I don't know off the top of my head, but I'll look at the book and see if that is true.