Fix bugs with numeric literals.

babff06: Require identifier used in `var` or `def` declarations to actually be an identifier token. Previously number tokens were accepted.

f670099: Fix numbers such as `0xabc.32xhello` to generate invalid C and Javascript code. Now it generates valid code, even though this syntax is bizzare.

1d03477: Restrict valid bases to 2 through 36. Base 1 doesn't make any sense, and bases above 37 aren't really defined that well (that I know of).

eb2822a: When using "x" a second time e.g. `32x0123x456` it wasn't working properly. Now it is.

bd72ebc: Only allow numbers in base 10 to have a decimal point. This also restricts numbers that come after the decimal point to being in base 10.

13049fd: Allow uppercase in number literals. This means that `0xCAFEBABE` is now valid. I'm not sure if this is part of the language specification but if not then I'd suggest allowing it.