Fix crash on invalid Unicode escape sequences in double-quoted strings
The decode_hex function didn't validate that Unicode codepoints from
\u and \U escapes are valid before encoding to UTF-8. Invalid codepoints
(> 0x10FFFF or surrogates 0xD800-0xDFFF) caused Char.chr to crash with
Invalid_argument instead of raising a proper Yamlrw_error.
Use Uchar.is_valid to validate codepoints, which correctly rejects both
out-of-range values and surrogate codepoints.
Found by AFL fuzzing.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>