Updates lexer spec

Adds case to ensure nil is returned from .latest() when lexing has
ended.

Adds case to ensure nil is returned from .latest() if no lexem has yet
been read.
Extracts file lexer from tokenizer

Extracts the majority of logic for keeping track of row, lexems,
caching of read lexems and other book keeping relating to lexems for
a specific file to it's own class.

Refactors tokenizer to use the new file lexer and returns all tests to
green.