Due to an oversight, hexadecimal constants such as 0X1234 are not
parsed correctly, scanning as two tokens: the integer 0, and the
identifier X1234.
A mistake in the same area also scans plain 0x as two tokens in
the same way, rather than returning a syntax error (although
there should not be any valid parses if such tokens are returned,
so this is a minor issue).
Fix both of these problems, and add a new internal test case
which directly verifies the scanner output for a selection of
integer constants.