use a single file for storing persistent properties

We have seen that storing persistent properties in separate files
causes increased boot latency compared to if they were stored in a
single contiguous file.

This change creates a simple format for a contiguously stored property
file, and adds the support for arbitrary characters in the names of
persistent properties, which previously had been restricted.  It has a
mechanism for converting older devices to the new format as well.

Bug: 64392887
Test: boot bullhead with new properties
Test: boot bullhead and verify old properties are converted to the new
      property file
Test: corrupt property file and ensure that it gets recovered from memory
Test: new unit tests
Change-Id: I60d8201d655ce5c97b33faae81d5ca8dbbb21a14
diff --git a/init/Android.bp b/init/Android.bp
index 33dfe56..8737def 100644
--- a/init/Android.bp
+++ b/init/Android.bp
@@ -72,6 +72,7 @@
         "import_parser.cpp",
         "log.cpp",
         "parser.cpp",
+        "persistent_properties.cpp",
         "property_service.cpp",
         "security.cpp",
         "selinux.cpp",
@@ -162,6 +163,7 @@
     srcs: [
         "devices_test.cpp",
         "init_test.cpp",
+        "persistent_properties_test.cpp",
         "property_service_test.cpp",
         "result_test.cpp",
         "rlimit_parser_test.cpp",