Implement quiche::QuicheTextUtils::HexDump() within QUICHE.

The implementation is based on
https://source.chromium.org/chromium/chromium/src/+/master:net/base/hex_utils.cc;l=13-45;drc=43b334ad1641a94cb11dec0d8023be47b16a66c0
with some tweaks and using Abseil instead of Chromium's base.

Also move some other non-trivial QuicheTextUtils method definitions to .cc file,
and add empty test case for HexDump().

PiperOrigin-RevId: 370724763
Change-Id: I780f5ccc889929331d66538b555790c0789a4efa
diff --git a/common/platform/api/quiche_text_utils_test.cc b/common/platform/api/quiche_text_utils_test.cc
index d6d1f4d..4372c07 100644
--- a/common/platform/api/quiche_text_utils_test.cc
+++ b/common/platform/api/quiche_text_utils_test.cc
@@ -34,6 +34,8 @@
 }
 
 TEST_F(QuicheTextUtilsTest, HexDump) {
+  // Verify output for empty input.
+  EXPECT_EQ("", quiche::QuicheTextUtils::HexDump(absl::HexStringToBytes("")));
   // Verify output of the HexDump method is as expected.
   char packet[] = {
       0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x51, 0x55, 0x49, 0x43, 0x21,