Implement a B-tree write scheduler.

Unlike the traditional eight-level HTTP priority scheduler, BTreeScheduler can use any priority scheme as long as it provides a total ordering.

This will be used for implementing WebTransport priority scheme.

PiperOrigin-RevId: 523753533
diff --git a/build/source_list.bzl b/build/source_list.bzl
index 3ef9b8b..6501eb8 100644
--- a/build/source_list.bzl
+++ b/build/source_list.bzl
@@ -20,6 +20,7 @@
     "balsa/noop_balsa_visitor.h",
     "balsa/simple_buffer.h",
     "balsa/standard_header_map.h",
+    "common/btree_scheduler.h",
     "common/capsule.h",
     "common/masque/connect_udp_datagram_payload.h",
     "common/platform/api/quiche_bug_tracker.h",
@@ -1024,6 +1025,7 @@
     "balsa/header_properties_test.cc",
     "balsa/simple_buffer_test.cc",
     "binary_http/binary_http_message_test.cc",
+    "common/btree_scheduler_test.cc",
     "common/capsule_test.cc",
     "common/masque/connect_udp_datagram_payload_test.cc",
     "common/platform/api/quiche_file_utils_test.cc",
@@ -1306,6 +1308,7 @@
 
 ]
 fuzzers_srcs = [
+    "common/btree_scheduler_fuzzer.cc",
     "common/structured_headers_fuzzer.cc",
     "quic/core/crypto/certificate_view_der_fuzzer.cc",
     "quic/core/crypto/certificate_view_pem_fuzzer.cc",