Phase 20 requires Response.body as a ReadableStream with body locking semantics and cancellation propagated to the underlying HTTP connection. Audit and harden fetch/Response behavior for bodyUsed, getReader() locking, cancellation, cloning, and stream errors.
Acceptance criteria:
- Response.body is locked while a reader is active and bodyUsed flips on consumption.
- text(), arrayBuffer(), and stream readers reject when the body was already consumed.
- Response.clone() follows stream tee semantics for unread bodies and fails for used bodies.
- reader.cancel() propagates to the underlying response body reader/connection where available.
- Add focused tests covering bodyUsed, clone, cancel, and mixed helper/reader consumption paths.