control: Use Group objects in events

Use the generated Group objects in configured events. Group objects are
temporarily generated from the `groups.json` configuration and passed to
each event. When the event is generated from its JSON configuration, the
group(s) its configured to use in the event are first copied from the
list of Group objects and then populated with the remaining details for
the group configuration that's provided in the event. Groups to be used
in the event must either have no profiles restricting their use or have
a profile that matches the event's profile where that profile is also
active.

Change-Id: Ifda7493ab256fa2fbf869e984609888c418b1f9b
Signed-off-by: Matthew Barth <msbarth@us.ibm.com>
diff --git a/control/json/event.hpp b/control/json/event.hpp
index 8c48f35..4806763 100644
--- a/control/json/event.hpp
+++ b/control/json/event.hpp
@@ -49,15 +49,6 @@
  */
 class Event : public ConfigBase
 {
-    static constexpr auto pathPos = 0;
-    static constexpr auto intfPos = 1;
-    static constexpr auto propPos = 2;
-    static constexpr auto typePos = 3;
-    static constexpr auto valuePos = 4;
-    using eGroup = std::vector<std::tuple<std::string, std::string, std::string,
-                                          std::optional<std::string>,
-                                          std::optional<PropertyVariantType>>>;
-
     static constexpr auto precondName = 0;
     static constexpr auto precondGroups = 1;
     static constexpr auto precondEvents = 2;
@@ -127,7 +118,7 @@
     Precondition _precond;
 
     /* List of groups associated with the event */
-    std::vector<eGroup> _groups;
+    std::vector<Group> _groups;
 
     /* List of actions for this event */
     std::vector<std::unique_ptr<ActionBase>> _actions;