identifiers can now contain hyphens, with the following restrictions:
* an identifier cannot start or end with a hyphen.
* an identifier cannot contain more than one hyphen in a row.
kebab-case identifiers can be used for type and variable names, as well
as message identifiers and labels.
to avoid ambiguity, the lexer now enforces whitespace around most binary
operators (with a few exceptions, such as semicolons). trying to
compile a "compact" arithmetic expression, such as
y=1+2
will now result in a "missing whitespace" error.