Rewrite make_lexer using a build_lexer function
Making things more "object-oriented" with a builder
Make 'run_tests' a thunk
local variables should be local
Make lexer.lua into a proper module
Move tests, fixes lua scoping issue in module