Lexer changes

This should flesh out the rest of the lexer. Tomorrow I'm going to write a
fuzzer + harness that will run this on the rust repo and compare to rlex