Tracing protocol: chunk QueryServiceStateResponse

The QueryServiceStateResponse IPC had a design oversight:
it was assuming that the response will fit into one IPC
message. This is not true when a lot of data sources with
large descriptors are registered. Each DataSourceDescritor
can be up to the size of an IPC message each.
Fix by chunking the response, splitting at the data source
level.
This change is binary compatible with the previous version.
The service still ensures that each chunk is a valid (but
incomplete) TracingServiceState response, so old clients
will still see the first response (which in most cases fits).

Bug: 153142114
Change-Id: I8256a440ddea1973400d8b2dd1d0496358bd2cd7
diff --git a/test/test_helper.h b/test/test_helper.h
index 8617466..07705a1 100644
--- a/test/test_helper.h
+++ b/test/test_helper.h
@@ -188,6 +188,7 @@
   void WaitForProducerEnabled();
   void WaitForTracingDisabled(uint32_t timeout_ms = 5000);
   void WaitForReadData(uint32_t read_count = 0, uint32_t timeout_ms = 5000);
+  TracingServiceState QueryServiceStateAndWait();
 
   std::string AddID(const std::string& checkpoint) {
     return checkpoint + "." + std::to_string(instance_num_);