Improve number literals

- allow underscore separators (e.g. 123_456_789)
- highlight exponential number literals (e.g. 6.02e23)
- fix hexadecimal and octal literal