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
{nit} change to `checkMatchesTokenData(lexer.result, Seq())` for consistency? In some other places, too.