Simplify operator handling

Adds a static list of valid operators to Lexer. This simplifies
consumeOperator() and Token.toString(). The added dependency from Token
to Lexer is a bit ugly, but implicitly existed before due to the use of
hardcoded Ops.