Detect obsolete binary base 'B' as binaryNumber

Lex `B` as `OBSOLETE_BINARY_INTEGER_BASE`.  Add
`OBSOLETE_BINARY_INTEGER_BASE` as a valid base in `binaryNumber` parser
rule.
Test binaryNumber with OBSOLETE_BINARY_INTEGER_BASE
Hexadecimal numbers with invalid digits

Instead of immediately ending a hexadecimal number when a digit outside
of [A-Fa-f0-9] is encountered, lex [G-Zg-z]+ as
INVALID_HEXADECIMAL_DIGITS and [A-Fa-f0-9]+ as VALID_HEXADECIMAL_DIGITS.
In the parser, similar to binaryNumber, hexadecimalNumber is composed of
BASE_INTEGER_PREFIX HEXADECIMAL_INTEGER_BASE
(INVALID_HEXADECIMAL_DIGITS | VALID_HEXADECIMAL_DIGITS)+.
hexadecimalNumber recovery

Pin HEXADECIMAL_INTEGER_BASE so a hexadecimalNumber with no digits will
recovery and not break parsing for the rest of the file.
Detect obsolete hexadecimal base 'X' as hexadecimalNumber

Lex `X` as `OBSOLETE_HEXADECIMAL_INTEGER_BASE`. Add
`OBSOLETE_HEXADECIMAL_INTEGER_BASE` as a valid base in `hexadecimalNumber`
parser rule.
 Octal numbers with invalid digits

Instead of immediately ending an octal number when a digit outside of [0-7] is
encountered, lex [8-9A-Za-z]+ as INVALID_OCTAL_DIGITS and [0-7]+ as
VALID_OCTAL_DIGITS.  In the parser, similar to binaryNumber, octalNumber is
composed of BASE_INTEGER_PREFIX OCTAL_INTEGER_BASE
(INVALID_OCTAL_DIGITS | VALID_OCTAL_DIGITS)+.
octalNumber recovery

Pin OCTAL_INTEGER_BASE so a octalNumber with no digits will recovery and not
break parsing for the rest of the file.
Allow invalid digits in decimal integers

Allow invalid digits, [A-Fa-f]+, in decimal integers.  [0-9]+ is lexed
as VALID_DECIMAL_DIGITS, while [A-Fa-f]+ is lexed as
INVALID_DECIMAL_DIGITS.  '_' is lexed as DECIMAL_SEPARATOR and can go
between valid or invalid decimal digits.  The only restrictions on
decimalNumber is that it must start with a VALID_DECIMAL_DIGITS and if
the first digit is a 0 the second can't be an invalid decimal digit or
that will trigger BASE_INTEGER_BASE as the invalid decimal digit, a
letter, will be interrupted as either a known or unknown base specifier.
Rename integer, number to whole number

Rename tokens with INTEGER in their name to WHOLE_NUMBER as they don't
include signs.  Rename Number rules to WholeNumber for the same reason.
Use decimalWholeNumber in decimal floats

Remove the DECIMAL_FLOAT token and instead make it a rule so that the
INVALID_DECIMAL_DIGITS allowed in decimalWholeNumber can be used for
decimal floats by using the decimalWholeNumber rule in a new
decimalFloat rule that emulates the token's old regex.
Add thorough number highlighting

Instead of one attribute for all numbers, have an attribute for valid
digits; decimal exponent, mark, and separator; invalid digits; base
prefixes; and obsolete base prefixes.
Update Color Settings Screenshot

To show new attributes for numbers.