Persist zone object properties option

Add functions to set and get persisted properties on a zone by the
interface and property name. When a property exists, it is persisted
each time it is updated.

Tested:
    Current property is added and persisted.
    When Current property not added, it is not persisted.

Change-Id: I2540c3673affcda871c9342cad44e85a4510d756
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/control/zone.cpp b/control/zone.cpp
index 6efbe73..fddca53 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -638,6 +638,25 @@
     return empty;
 }
 
+auto Zone::getPersisted(const std::string& intf,
+                        const std::string& prop)
+{
+    auto persisted = false;
+
+    auto it = _persisted.find(intf);
+    if (it != _persisted.end())
+    {
+        return std::any_of(it->second.begin(),
+                           it->second.end(),
+                           [&prop](auto& p)
+                           {
+                               return prop == p;
+                           });
+    }
+
+    return persisted;
+}
+
 std::string Zone::current(std::string value)
 {
     auto current = ThermalObject::current();
@@ -656,7 +675,10 @@
     if (value != current && isSupported)
     {
         current = ThermalObject::current(value);
-        saveCurrentMode();
+        if (getPersisted("xyz.openbmc_project.Control.ThermalMode", "Current"))
+        {
+            saveCurrentMode();
+        }
         // Trigger event(s) for current mode property change
         auto eData = _objects[_path]
                              ["xyz.openbmc_project.Control.ThermalMode"]