- Tests: Add Kafka rebalance command and consumer test
- Producer: make constructor clear on accepting an existing Cluster to share OR pass seed addresses and Producer will create cluster itself.

- Tests: Fix API calls to Producer and add test for multiple Producers sharing a single Cluster.
Stage 1 of rework Publisher to use queues per partition instead of putting failed messages into a separate queue and than synchronize them with Draining partition state.
- Tests: Add test to verify we don't let user code run on the scheduler thread
Removed old recovery code.

Added listening to partition availability events.
Start partitions queues in offline state and upon receiving "partition online" event, start sending.
Producer recovery works but most unit tests fail
Rolled back to old implementation of partition state changes events. RefCount would ignore events before 1st subscriber.
- Consumer: subscribe observer to subject before getting and subscribing to TopicPartitions
Merge branch 'pub-queue-rework'

Conflicts:
	src/Producer.cs
- Cluster: Add CheckConnected() function to a few more of the methods to make sure they're not called before calling ConnectAsync.

- Fetcher: Add Publish().RefCount() to ReceivedMessages and build only once to ensure multiple subscriptions don't result in multiple execution pipelines.
- Tests: a few tweaks to tests, make Consumer follows rebalance run a little longer since re-election takes some time.