pw_rpc: Update protocol for server streams

Update the server-to-client RPC packet types so that the packet type
unambiguously indicates whether it is the first or last packet. This is
already the case for client-to-server RPC packet types.

- Have RESPONSE always be the last packet in the stream. For RPCs
  without a server stream, it includes a payload. Remove
  SERVER_STREAM_END.
- Introduce the SERVER_STREAM packet, to parallel the CLIENT_STREAM
  packet.
- Update the server and client code and tests. Test that old-style
  streaming RPCs still work correctly.
- Refactor the duplicate MessageOutput class into a FakeChannelOutput
  used by both Nanopb and raw RPCs.
- In C++, don't encode default-valued payload and status fields.

Change-Id: I218772dad6c2981dda5f032f298ea43ee5e08b4d
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/49822
Commit-Queue: Wyatt Hepler <hepler@google.com>
Pigweed-Auto-Submit: Wyatt Hepler <hepler@google.com>
Reviewed-by: Alexei Frolov <frolv@google.com>
diff --git a/pw_rpc/BUILD.gn b/pw_rpc/BUILD.gn
index d5f4fd5..25953c4 100644
--- a/pw_rpc/BUILD.gn
+++ b/pw_rpc/BUILD.gn
@@ -127,13 +127,20 @@
 pw_source_set("test_utils") {
   public = [
     "public/pw_rpc/internal/test_method.h",
+    "pw_rpc_private/fake_channel_output.h",
     "pw_rpc_private/internal_test_utils.h",
     "pw_rpc_private/method_impl_tester.h",
   ]
-  public_configs = [ ":private_includes" ]
+  sources = [ "fake_channel_output.cc" ]
+  public_configs = [
+    ":public_include_path",
+    ":private_includes",
+  ]
   public_deps = [
     ":client",
     ":server",
+    dir_pw_assert,
+    dir_pw_bytes,
   ]
   visibility = [ "./*" ]
 }