Make auto-generated c++ classes hermetic, intorudce CopyablePtr

This is the first step towards switching from libprotobuf to protozero.
This change makes the headers of auto-generated C++ core classes
independent from each other (i.e. if A has a nested field B,
A.h does not include anymore B.h, only the .cc does).
This CL breaks the header dependency turning
message-type fields from nested objects to heap-based pointers,
allowing to keep only the forward declaration in the header.
In order to do so this CL introduced a base::CopyablePtr<T> which
is a simple pointer wrapper, similar to unique_ptr, that behaves
like a std::vector<T> of fixed size = 1.
This CL also updates the code generator to use CopyablePtr.

Bug: 132880619
Test: perfetto_unittests --gtest_filter=CopyablePtrTest.* + builds
Change-Id: If71015a05740952353ea77b3a5af673f7f9dabf0
diff --git a/src/tracing/core/test_config.cc b/src/tracing/core/test_config.cc
index 02ba732..78b692b 100644
--- a/src/tracing/core/test_config.cc
+++ b/src/tracing/core/test_config.cc
@@ -79,7 +79,7 @@
   send_batch_on_register_ = static_cast<decltype(send_batch_on_register_)>(
       proto.send_batch_on_register());
 
-  dummy_fields_.FromProto(proto.dummy_fields());
+  dummy_fields_->FromProto(proto.dummy_fields());
   unknown_fields_ = proto.unknown_fields();
 }
 
@@ -113,7 +113,7 @@
       static_cast<decltype(proto->send_batch_on_register())>(
           send_batch_on_register_));
 
-  dummy_fields_.ToProto(proto->mutable_dummy_fields());
+  dummy_fields_->ToProto(proto->mutable_dummy_fields());
   *(proto->mutable_unknown_fields()) = unknown_fields_;
 }