Add parsing logic for class declarations

(This also introduces the EOF token)
`lexToken` needs to return something when it sees an invalid token. Currently it returns `None` in that case (and blows up the parser in the process).

I'd argue for the lexer adding a finding about the invalid token, consuming all invalid input, and returning the next valid token in the input.