feat(lexer): Faster lexer rewrite

Add a new lexer based on a scanner that produces tokens one at a time.