feat(pubsublite): Committer implementation #3198
Depends on a number of other PRs to be committed first, mainly #3143.
Calling out potentially controversial behavior of the committer: when Stop() is called, it the stream is left open to process outstanding acks. For example, the user may call Subscriber.Stop() to stop receiving new messages from the server, and continue processing/acking all the outstanding messages. But if they never finish acking all those messages, the committer stream remains open. Perhaps we should have a timer to do a hard shutdown after N minutes? Or expose a Subscriber.Shutdown() to do the hard shutdown (but relies on the user to call this)?