ffi: Peek C strings as non-legacy strings, else bytevectors.
When the FFI peeks at a C string (ASCII and null terminated) it now
copies the characters into a ustring (rather than a deprecated legacy
string). If the C string contains non-ASCII characters, the FFI
returns a bytevector, passing the decoding problem on to higher
levels, and avoiding an extra copy (from bytes to string) when no
translation is needed.
Add c-peek-csubstring, a version of c-peek-cstring that takes a byte
count and does NOT require the C string to be null terminated.