Added utility functions getAllProperties and unpackProperties

Tested:
  - Added example to verify that functions work correctly
  - Added new unit tests that are passing
  - All other tests are still passing after this change
  - Added handling of new type (std::monostate) which can
    be used as first type in variant to represent that none
    of the other types was matched

Change-Id: Ic8e7c8d3116d64b94be37147ae8a80ebb5d3811d
Signed-off-by: Krzysztof Grobelny <krzysztof.grobelny@intel.com>
diff --git a/src/exception.cpp b/src/exception.cpp
index c13c5dd..17a988d 100644
--- a/src/exception.cpp
+++ b/src/exception.cpp
@@ -120,5 +120,26 @@
     return errWhat;
 }
 
+UnpackPropertyError::UnpackPropertyError(std::string_view propertyName,
+                                         std::string_view reason) :
+    propertyName(propertyName),
+    reason(reason)
+{}
+
+const char* UnpackPropertyError::name() const noexcept
+{
+    return errName;
+}
+
+const char* UnpackPropertyError::description() const noexcept
+{
+    return errDesc;
+}
+
+const char* UnpackPropertyError::what() const noexcept
+{
+    return errWhat;
+}
+
 } // namespace exception
 } // namespace sdbusplus