control: Use group objects in actions

Switch to use the group objects created from JSON in the actions which
allows the zone and fan YAML objects to be removed from the JSON based
binary. In switching to the JSON based group objects, the
`default_floor` action required additional methods to be added to the
appropriate objects. These additional methods were copied over from the
associated YAML based object classes.

To reduce the amount of changes in this commit, the `requestIncrease`
method was not copied over and will be in a following commit. An
additional commit will also remove the use of YAML based objects from
the JSON based zone object.

Change-Id: I5fea29f099d0176b2ffe486e79f0c585e744d807
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/control/json/manager.hpp b/control/json/manager.hpp
index 60cf2b7..8919b63 100644
--- a/control/json/manager.hpp
+++ b/control/json/manager.hpp
@@ -135,6 +135,17 @@
     }
 
     /**
+     * @brief Check if the given path and inteface is owned by a dbus service
+     *
+     * @param[in] path - Dbus object path
+     * @param[in] intf - Dbus object interface
+     *
+     * @return - Whether the service has an owner for the given object path and
+     * interface
+     */
+    static bool hasOwner(const std::string& path, const std::string& intf);
+
+    /**
      * @brief Get the configured power on delay(OPTIONAL)
      *
      * @return Power on delay in seconds
@@ -165,6 +176,11 @@
     /* List of active profiles */
     static std::vector<std::string> _activeProfiles;
 
+    /* Subtree map of paths to services (with ownership state) of interfaces */
+    static std::map<std::string, std::map<std::pair<std::string, bool>,
+                                          std::vector<std::string>>>
+        _servTree;
+
     /* List of zones configured */
     std::map<configKey, std::unique_ptr<Zone>> _zones;