The lexer now records every token it encounters
internally such that peeking and other useful
stuff is possible. Will come in handy for the
parser. Also, while i was at it, i also added
more primitive tokens like + - * / because i'm
probably gonna need it later anyway.
This is a little helper for the lexer so it can
read a stream forwards and backwards. It will
also keep track of line and column numbers for
better error output.