Add parsing logic for class declarations

Includes the following changes:
* add parsing methods relevant for class declarations
* add EOF token to lexer
* change behavior of lexer so returns a stream of Token instead of Option[Token]
* add recovery to lexer -- lexer will skip until it sees whitespace or EOF if it sees invalid tokens
* add tests for lexer recovery
please use `whitespace(input.currentChar)` as above (or make consistent)