PEL: Use class to watch properties in DataIface

Instead of having the DataInterface class explicitly watch for all of
the PropertiesChanged and InterfacesAdded signals for the D-Bus
properties it needs the values of, create some classes to wrap that
functionality.

The PropertyWatcher class will call a user defined function, passing it
the property value for the path/interface/property specified in the
following cases:
1) On construction, by making a property read method call, if the
   property is on D-Bus then.
2) On a properties changed signal for that property.
3) On an interfaces added signal for that property's interface.

The InterfaceWatcher class will call a user defined function, passing it
the property name/value map for all properties in that interface, in the
following cases:
1) On construction, by making a GetAll property read method call, if the
   interface is on D-Bus then.
2) On a properties changed signal for that interface.
3) On an interfaces added signal for that interface.

Both of these are derived from the DBusWatcher class, and the
DataInterface will store a vector of DBusWatcher pointers after it
creates the instances of the PropertyWatcher or InterfaceWatcher classes
in its constructor.

This commit changes the current properties being watched - the system
model, the system serial number, and the operating system status to this
method.

Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: Iade4ac89a9ce1d46bdebf353350bf161722ced9f
diff --git a/extensions/openpower-pels/dbus_types.hpp b/extensions/openpower-pels/dbus_types.hpp
new file mode 100644
index 0000000..d263958
--- /dev/null
+++ b/extensions/openpower-pels/dbus_types.hpp
@@ -0,0 +1,23 @@
+#pragma once
+
+#include <map>
+#include <sdbusplus/bus.hpp>
+#include <string>
+#include <variant>
+#include <vector>
+
+namespace openpower::pels
+{
+
+using DBusValue =
+    sdbusplus::message::variant<std::string, bool, std::vector<uint8_t>>;
+using DBusProperty = std::string;
+using DBusInterface = std::string;
+using DBusService = std::string;
+using DBusPath = std::string;
+using DBusInterfaceList = std::vector<DBusInterface>;
+using DBusPathList = std::vector<DBusPath>;
+using DBusPropertyMap = std::map<DBusProperty, DBusValue>;
+using DBusInterfaceMap = std::map<DBusInterface, DBusPropertyMap>;
+
+} // namespace openpower::pels