h3: avoid needless copy when checking dgram queue

In an old version of the DATAGRAM poll event, it returned an HTTP/3 datagram
flow ID, which required peeking at the first 8 bytes of the QUIC frame
payload at the front of the queue.

When we changed to edge-triggered events, we changed the logic to
always return the placeholder value 0. However, we didn't change
the logic to avoid peeking at the data, which meant we left a
needless 8-byte allocation and copy.

This change removes the needless copy, replacing it instead with a check
of the queue length to determine if the edge-trigger should fire
or not.
diff --git a/quiche/src/h3/mod.rs b/quiche/src/h3/mod.rs
index 0af162f..1cec93e 100644
--- a/quiche/src/h3/mod.rs
+++ b/quiche/src/h3/mod.rs
@@ -1337,29 +1337,19 @@
     fn process_dgrams(
         &mut self, conn: &mut super::Connection,
     ) -> Result<(u64, Event)> {
-        let mut d = [0; 8];
+        if conn.dgram_recv_queue_len() > 0 {
+            if self.dgram_event_triggered {
+                return Err(Error::Done);
+            }
 
-        match conn.dgram_recv_peek(&mut d, 8) {
-            Ok(_) => {
-                if self.dgram_event_triggered {
-                    return Err(Error::Done);
-                }
+            self.dgram_event_triggered = true;
 
-                self.dgram_event_triggered = true;
-
-                Ok((0, Event::Datagram))
-            },
-
-            Err(crate::Error::Done) => {
-                // The dgram recv queue is empty, so re-arm the Datagram event
-                // so it is issued next time a DATAGRAM is received.
-                self.dgram_event_triggered = false;
-
-                Err(Error::Done)
-            },
-
-            Err(e) => Err(Error::TransportError(e)),
+            return Ok((0, Event::Datagram));
         }
+
+        self.dgram_event_triggered = false;
+
+        Err(Error::Done)
     }
 
     /// Reads request or response body data into the provided buffer.