[IPC 4] Add client-side logic.

Introduces two classes + corresponding impl(s).
Client is the class that talks with the host and forwards
methods invocations through protobuf. Is essentially a
multiplexer of invocations coming from the various
autogenerated stubs, which are subclasses of ServiceProxy.

ServiceProxy is the base class for autogenerated stubs. It
keeps tracks of pending requests for each Service.

So the final picture will be as follows:

ServiceProxy_ForServiceA  \
ServiceProxy_ForServiceB  --> Client(Impl) -> UnixSocket
ServiceProxy_ForServiceC  /

ServiceProxy instances' and Client's lifetimes are decoulped
from each other via weak pointers.

Bug: 68854111
Change-Id: I90d9d90727068afa86aab62779605afa508c6ca0
diff --git a/ipc/src/buffered_frame_deserializer.h b/ipc/src/buffered_frame_deserializer.h
index 0a90ab8..0aca5e7 100644
--- a/ipc/src/buffered_frame_deserializer.h
+++ b/ipc/src/buffered_frame_deserializer.h
@@ -82,6 +82,11 @@
   explicit BufferedFrameDeserializer(size_t max_capacity = 128 * 1024);
   ~BufferedFrameDeserializer();
 
+  // This function doesn't really belong here as it does Serialization, unlike
+  // the rest of this class. However it is so small and has so many dependencies
+  // in common that doesn't justify having its own class.
+  static std::string Serialize(const Frame&);
+
   // Returns a buffer that can be passed to recv(). The buffer is deliberately
   // not initialized.
   ReceiveBuffer BeginReceive();