changing lexer to tokenize numbers and strings better.

strings that contain escaped characters now produce strings
in Luci with equivalent escape sequences.

Luci programs can now contain hex (0x...) integers and floating-point
numbers with scientific notation (e.g. 1e2 or 3.4E-5).

also added a `hex()` builtin function for getting hex string
representations of integers.