Implement negative hexadecimal literals

Fairly simple fix for #36:

- `sign` is no longer part of `string` but handled separately
- no longer throws on signed hex
- if `sign` is negative, then the unary minus operator is applied to `string`; otherwise, the unary plus operator is applied like before
- relevant test cases are renamed to `.json5`