Switch Interaction Model client error reporting to just CHIP_ERROR. (#13888)

* Switch Interaction Model client error reporting to just CHIP_ERROR.

Now that we can put a StatusIB inside a CHIP_ERROR, we can stop
passing both, or passing just EmberAfStatus, and pass a CHIP_ERROR
that either contains a StatusIB or contains the actual client-side
error we ran into (e.g. failure to decode).

* Address review comments.
diff --git a/src/app/tests/TestTimedHandler.cpp b/src/app/tests/TestTimedHandler.cpp
index 63d7f19..e92fedf 100644
--- a/src/app/tests/TestTimedHandler.cpp
+++ b/src/app/tests/TestTimedHandler.cpp
@@ -67,8 +67,7 @@
         mLastMessageWasStatus = aPayloadHeader.HasMessageType(MsgType::StatusResponse);
         if (mLastMessageWasStatus)
         {
-            mStatus.mStatus = Status::Failure;
-            StatusResponse::ProcessStatusResponse(std::move(aPayload), mStatus);
+            mError = StatusResponse::ProcessStatusResponse(std::move(aPayload));
         }
         if (mKeepExchangeOpen)
         {
@@ -83,7 +82,7 @@
     bool mKeepExchangeOpen     = false;
     bool mNewMessageReceived   = false;
     bool mLastMessageWasStatus = false;
-    StatusIB mStatus;
+    CHIP_ERROR mError          = CHIP_NO_ERROR;
 };
 
 } // anonymous namespace
@@ -128,7 +127,7 @@
     ctx.DrainAndServiceIO();
     NL_TEST_ASSERT(aSuite, delegate.mNewMessageReceived);
     NL_TEST_ASSERT(aSuite, delegate.mLastMessageWasStatus);
-    NL_TEST_ASSERT(aSuite, delegate.mStatus.mStatus == Status::Success);
+    NL_TEST_ASSERT(aSuite, delegate.mError == CHIP_NO_ERROR);
 
     // Send an empty payload, which will error out but not with the
     // UNSUPPORTED_ACCESS status we expect if we miss our timeout.
@@ -144,7 +143,7 @@
     ctx.DrainAndServiceIO();
     NL_TEST_ASSERT(aSuite, delegate.mNewMessageReceived);
     NL_TEST_ASSERT(aSuite, delegate.mLastMessageWasStatus);
-    NL_TEST_ASSERT(aSuite, delegate.mStatus.mStatus != Status::UnsupportedAccess);
+    NL_TEST_ASSERT(aSuite, StatusIB(delegate.mError).mStatus != Status::UnsupportedAccess);
 }
 
 void TestTimedHandler::TestInvokeFastEnough(nlTestSuite * aSuite, void * aContext)
@@ -178,7 +177,7 @@
     ctx.DrainAndServiceIO();
     NL_TEST_ASSERT(aSuite, delegate.mNewMessageReceived);
     NL_TEST_ASSERT(aSuite, delegate.mLastMessageWasStatus);
-    NL_TEST_ASSERT(aSuite, delegate.mStatus.mStatus == Status::Success);
+    NL_TEST_ASSERT(aSuite, delegate.mError == CHIP_NO_ERROR);
 
     // Sleep for > 50ms so we miss our time window.
     chip::test_utils::SleepMillis(75);
@@ -197,7 +196,7 @@
     ctx.DrainAndServiceIO();
     NL_TEST_ASSERT(aSuite, delegate.mNewMessageReceived);
     NL_TEST_ASSERT(aSuite, delegate.mLastMessageWasStatus);
-    NL_TEST_ASSERT(aSuite, delegate.mStatus.mStatus == Status::UnsupportedAccess);
+    NL_TEST_ASSERT(aSuite, StatusIB(delegate.mError).mStatus == Status::UnsupportedAccess);
 }
 
 void TestTimedHandler::TestInvokeTooSlow(nlTestSuite * aSuite, void * aContext)
@@ -229,7 +228,7 @@
     ctx.DrainAndServiceIO();
     NL_TEST_ASSERT(aSuite, delegate.mNewMessageReceived);
     NL_TEST_ASSERT(aSuite, delegate.mLastMessageWasStatus);
-    NL_TEST_ASSERT(aSuite, delegate.mStatus.mStatus == Status::Success);
+    NL_TEST_ASSERT(aSuite, delegate.mError == CHIP_NO_ERROR);
 
     // Do nothing else; exchange on the server remains open.  We are testing to
     // see whether shutdown cleans it up properly.