Avoiding monolithic Token::Type enum

Token::Type is now a typedef to an int, and an enum named
CommonTokenType is of type Token::Type and contains common tokens
used in all (to be) supported languages. CommonTokenType ends with
TT_UNCOMMON_START, which can be used as a starting value
for language-specific token types.

This allows languages (and the scanner, most importatntly for
TT_SPACE and TT_NEWLINE) to share common token types while avoiding
the need for every single token type for every single language
to be crammed into one enum.

See the unit test (BasicScannerTests) if none of this makes sense.