Introduce base::NoDestructor<T> to simplify static objects

For accessors, I intentionally avoided operator* and operator->, as I believe
that they're very opaque at the call site, especially if the contained object
itself has these operators (and imo operator-> is in general weird as its
evaluation is iterative, and would depend on T).

Also decided not to bother with getting initializer list constructor matching
to work. We can add that when needed.

Change-Id: I845f10239eb58e7751550b7ead385961c2ce98ae
diff --git a/Android.bp b/Android.bp
index ab6c201..110ac0a 100644
--- a/Android.bp
+++ b/Android.bp
@@ -2849,6 +2849,7 @@
     "src/base/event.cc",
     "src/base/file_utils.cc",
     "src/base/metatrace.cc",
+    "src/base/no_destructor_unittest.cc",
     "src/base/optional_unittest.cc",
     "src/base/paged_memory.cc",
     "src/base/paged_memory_unittest.cc",