Design API for Reactive client exceptions and possible translation
The current adapter implementation wraps the Java client and throws the errors what the Java client throws.
Since the goal is to design a stable API which could be implemented with a native Reactive client later, it is necessary to document and standardize on the error handling and exception model which could be used both in the current adapter approach and later with the native client.
#22 adds CorrelatedMessageSendingException which can be used to determine which input message spec didn't get sent. It's necessary to use sendManyCorrelated to pass a custom correlation key.
Discussed with @lhotari : we already depend on pulsar-client-api for a variety of classes (Message, MessageId, ...). So we can probably reuse the PulsarException classes, even when we'll do the native client.
#118 adds tests to verify that the exceptions generated by the driver are propagated without translation (except for ReactiveMessageSender::sendMany which wraps it into ReactiveMessageSendingException but that's documented).