Fix utility.hpp to use correct types for Request and Context

When requesting a Request or Context object as part of the handler
signature, it should be a std::shared_ptr<ipmi::Context> or
std::shared_ptr<ipmi:message::Request>. There was a bug that made it so
it was not possible to have either of those in the signature. This
commit enables both.

Change-Id: Ib52000f643d7b5f21bc4022629e7d7b03a524dc1
Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
diff --git a/include/ipmid/utility.hpp b/include/ipmid/utility.hpp
index 3a36434..79c76f7 100644
--- a/include/ipmid/utility.hpp
+++ b/include/ipmid/utility.hpp
@@ -27,7 +27,12 @@
 namespace ipmi
 {
 
+// forward declare Context and Request for NonIpmiArgsCount
 struct Context;
+namespace message
+{
+struct Request;
+}
 
 namespace utility
 {
@@ -86,7 +91,11 @@
 {
     constexpr static std::size_t size()
     {
-        if constexpr (std::is_same<FirstArg, ipmi::Context>::value ||
+        if constexpr (std::is_same<
+                          FirstArg,
+                          std::shared_ptr<ipmi::message::Request>>::value ||
+                      std::is_same<FirstArg,
+                                   std::shared_ptr<ipmi::Context>>::value ||
                       std::is_same<FirstArg, boost::asio::yield_context>::value)
         {
             return 1 + NonIpmiArgsCount<std::tuple<OtherArgs...>>::size();