Improved lexer

1) recognises negative numbers
2) More closely follows SML on type variables and symbolic identifiers
3) Simplified processing of long identifiers.  The lowest level now just
recognises a sequence of alphanumeric+symbolic+#"." characters.  The next level
up splits it on the first "." (if present) and checks that both sides are either
all alphanum'_ or all symbolic.