Previously, Headers.set() converted the header name with
JS_ToCStringLen(). When a new header was added, the list retained that
pointer after it was released with JS_FreeCString(), leaving the header
with a dangling name.
The fix is to copy the name into the request pool only when set() creates
a new list entry. Replacing an existing entry requires no additional
allocation, and the temporary QuickJS string can always be released
after the mutation.