Add two new optional channels to the ProducerConfig for handling failures and acks

...
FailedChannel, when provided will have all messages that are not acked
sent as type *ConsumerEvent. The application using this package is
responsible for reading from the failed channel or it will eventually
block.

AckingChannel, when provided will provide counts per partition, per
topic of acked messages after each flush. The application using this
package is responsible for reading from the acking channel or is will
eventually block.

This commit also includes a change for the error sent in the
DroppedMessagesError struct to the errorCb to be the block error instead
of the error returned from Produce.
Might want to guard this in the same check used elsewhere `if p.config.AckingChannel != nil {` to avoid creating the map if it's not needed.