CodegenC: support arbitrary bytes in strings

The C backend used to compile high bytes incorrectly (for example, `"\x80"` to `"\x0A\x40"`) because C does not understand fully the string encoding emitted by Haskell's `show`.

To remedy this, this patch adds `showCStr`, which is a bit more conservative.

All tests pass with the C backend on my machine; other backends have not been tested.