Add Key Value Storage implementation for EFR32 platform. (#4367)

* Add pigweed logging backend for CHIP

Add a small module which connects pigweed logs to CHIP logging.

* Update pigweed repo

Adds support for C++14 KVS.

* Add KVS implementation for EFR32 platform

Use the pigweed KVS to implement persitent storage on the EFR32
platform. Only gets included when the application defined the KVS
macros.

* Add persistent storage test/example

Add an example app which tests the KVS api.
diff --git a/src/platform/BUILD.gn b/src/platform/BUILD.gn
index 8157c42..abffbe0 100644
--- a/src/platform/BUILD.gn
+++ b/src/platform/BUILD.gn
@@ -15,7 +15,7 @@
 import("//build/config/linux/pkg_config.gni")
 import("//build_overrides/chip.gni")
 import("//build_overrides/nlio.gni")
-
+import("//build_overrides/pigweed.gni")
 import("${chip_root}/build/chip/buildconfig_header.gni")
 
 import("device.gni")
@@ -164,6 +164,7 @@
       "../include/platform/ConfigurationManager.h",
       "../include/platform/ConnectivityManager.h",
       "../include/platform/GeneralUtils.h",
+      "../include/platform/KeyValueStoreManager.h",
       "../include/platform/PersistedStorage.h",
       "../include/platform/PlatformManager.h",
       "../include/platform/SoftwareUpdateManager.h",
@@ -313,6 +314,18 @@
         "EFR32/gatt_db.h",
         "FreeRTOS/SystemTimeSupport.cpp",
       ]
+
+      # Add pigweed KVS
+      deps = [
+        "$dir_pw_kvs:crc16",
+        "$dir_pw_log",
+      ]
+      public_deps += [ "$dir_pw_kvs" ]
+      sources += [
+        "EFR32/KeyValueStoreManagerImpl.cpp",
+        "EFR32/KeyValueStoreManagerImpl.h",
+      ]
+
       if (chip_enable_openthread) {
         public_deps += [ "${openthread_root}:libopenthread-ftd" ]