Better structuring modules, adding comments, and tests

Adding the start of the testing setup
Adding a Makefile to make it easier to test and perf test
Updating lexer to return a table that yields a token stream