Implement the client side of timed write. (#12567)

Fixes that had to be made alongside the main change:

1) Fix chip-tool to use the templated WriteAttribute for its
   command-line writes so we can actually pass in the timeout optional
   parameter for testing.

2) Factor some code for dealing with timed interactions out of
   CommandSender into TimedRequest so WriteClient can share it.

3) Fix the OnError signature for WriteClient::Callback to take a
   StatusIB, so we can properly communicate errors back and actually
   test for them in YAML.
diff --git a/src/app/BUILD.gn b/src/app/BUILD.gn
index 5e5e7db..8024abc 100644
--- a/src/app/BUILD.gn
+++ b/src/app/BUILD.gn
@@ -123,6 +123,8 @@
     "StatusResponse.h",
     "TimedHandler.cpp",
     "TimedHandler.h",
+    "TimedRequest.cpp",
+    "TimedRequest.h",
     "WriteClient.cpp",
     "WriteHandler.cpp",
     "decoder.cpp",