Add lexer stub and test for lexing the empty string.

This means we first have to read the whole input file before we can lex it, I'd rather see this take an `InputStream` (maybe overload it with `process(input: File)` so the parser doesn't have to bother with supplying an `InputStream`)