chore(lexer): Introduce different classes of tokens.

Use the new token classes to restrict the grammar to only
allow identifiers or keywords as filter and member names.
For object literal keys we also allow strings.