Converted the DarkCanaryChannelHandler to be a class instead of an object. This way we have one handler, and
hence one ZooKeeperClusterClient per PartitionedNetworkClient.

The previous setup would not have worked if we had multiple PartionedNetworkClient objects in a single process:
they would all have shared the same zookeeper client, and only one of them would have got the correct dark
canary configurations.