nginx: properly iterate over open HTTP/3 streams
nginx: properly iterate over open HTTP/3 streams

When finalizing an HTTP/3 connection, we iterate over all open streams
so they can be closed properly.

For each iteration, the stream at the root of the streams tree is picked
and woken up. This assumes that the stream actually gets closed, so that
in the next iteration a different stream is picked, but this is not
necessarily true, as a stream could be blocked and be unable to actually
write, say, an HTTP error response.

This means that we might end up in a n infinite loop, where a stream is
blocked, so it can't be closed, but it keeps getting picked for each
loop iteration.

Instead, properly walk the tree, so that each stream is picked only once
during the loop.

cloudflare/quiche,cloudflare/quiche,cloudflare/quiche