Lex trailing colons for keyword identifiers

Parse `:` followed by <space>, <tab>, <newline>, and <carriage return>,
or SPACE in Elixir's Erlang macros, as a COLON so that it can be
combined with preceding identifiers, aliases, char lists or strings as
keyword identifiers.
Alias keyword identifiers

<alias>:
Identifier keyword identifiers

<identifier>:
Map operator

Recognize `%{}` as MAP_OPERATOR.  It can be used as a value.
Map keyword identifier

%{}:
Tuple operator

Lex `{}`as TUPLE_OPERATOR.  It can be used as a value.
Tuple keyword identifier

{}:
Quote keyword identifiers

Keyword identifiers where the a Char List or String is before the COLON
to allow for interpolation of the atom in the keyword identifier.
Bit string operator

`<<>>` lexed as BIT_STRING_OPERATOR, which is a `value` in the parser.
Bit string keyword indentifier

<<>>:
Comparison operator keyword identifier

`!==:`, `===:`, `!=`, `==`, and `=~`.
Fix order choice for keywordIdentifier

Keep choice elements in alphabetical order.
Lex `!==` / `: ` as OPERATOR_KEYWORD

Lex `!==` used in keyword identifiers as OPERATOR_KEYWORD so that the
bnf grammar doesn't have to sort out precedence of `!==` as binary
operator and as a keyword identifier.
Lex `<<>>` / `: ` as OPERATOR_KEYWORD

Match `<<>>` followed by `: ` as OPERATOR_KEYWORD to match handling of
`!==` / `: `.
Lex `%{}` / `: ` as OPERATOR_KEYWORD

Match `%{}` followed by `: ` as OPERATOR_KEYWORD to match handling of
`!==` / `: `.
 Lex `{}` / `: ` as OPERATOR_KEYWORD

Match `{}` followed by `: ` as OPERATOR_KEYWORD to match handling of
`!==` / `: `.
Lex {AND_OPERATOR} / {COLON}{SPACE} as OPERATOR_KEYWORD

Lex `&&&` / `: `, `and` / `: `, and `&&` / `: ` as OPERATOR_KEYWORD.
Lex {ARROW_OPERATOR} / {COLON}{SPACE} as OPERATOR_KEYWORD

Lex ("<<<" | "<<~" | "<|>" | "<~>" | ">>>" | "~>>" | "<~" | "|>" | "~>")
/ ": " as OPERATOR_KEYWORD.
Lex `^^^` / `: ` as OPERATOR_KEYWORD
Lex {OR_OPERATOR} / ": " as OPERATOR_KEYWORD

Lex ("|||" | "||" | "or") / ": " as OPERATOR_KEYWORD.