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/Android.bp b/Android.bp
index 81856fe..5a6eee3 100644
--- a/Android.bp
+++ b/Android.bp
@@ -3349,6 +3349,7 @@
     ":perfetto_src_traced_probes_ftrace_test_messages_zero_gen",
     "src/base/android_task_runner.cc",
     "src/base/circular_queue_unittest.cc",
+    "src/base/copyable_ptr_unittest.cc",
     "src/base/event.cc",
     "src/base/file_utils.cc",
     "src/base/metatrace.cc",