Support hex character literals (eg. #\x41 => #\A)

According to R6RS section 4.2.6 characters literals can be entered as `#\x<hex scalar value>`. This patch implements parsing of such literals. Surrogate code points (0xB800 through 0xBFFF) are rejected in accordance with the standard.

Unfortunately, since JS strings are sequences of 16-bit unsigned ints, the full Unicode range cannot be represented. Therefore, an error is generated when a character literal is requested whose value exceeds 0xFFFF. This is a violation of R6RS, which requires that the full Unicode range be represented.