pw_rpc: Rework Python RPC client

- Restructure the RPC call object to use a consistent API for all types
  of RPC.
- Support synchronous and asynchronous invocations for all RPC types.
- Switch to gRPC-like callback names: on_next, on_completed, on_error.
  Rename complete() to completed() for consistency.
- Call the on_error callback when an RPC's payload fails to decode.
- Remove the "keep_open" feature, which is obsolete since client
  streaming RPCs are now supported.
- Default to override_pending=True in the callback client.

Change-Id: Ic6a26393acb8b56fcac97fbbe3e633cc5b1b7947
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/54220
Reviewed-by: Alexei Frolov <frolv@google.com>
Commit-Queue: Wyatt Hepler <hepler@google.com>
Pigweed-Auto-Submit: Wyatt Hepler <hepler@google.com>
diff --git a/pw_rpc/docs.rst b/pw_rpc/docs.rst
index a45e362..b77b013 100644
--- a/pw_rpc/docs.rst
+++ b/pw_rpc/docs.rst
@@ -415,6 +415,7 @@
   recognize.
 * ``FAILED_PRECONDITION`` -- Received a packet for a service method that the
   client did not invoke.
+* ``DATA_LOSS`` -- Received a corrupt packet for a pending service method.
 
 Server-to-client packets
 ^^^^^^^^^^^^^^^^^^^^^^^^