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.
It doesn't, and it was never my intention to include that information as it is not needed in my current application.  What I *do* care about is purely the values to know I sent N messages, and N messages have been acked.  I could certainly add it by wrapping the map in a struct that includes the topic if that is desired.  

```
type AcksPerPartition struct {
    topic         string
    partitionAcks map[int32]int64
}
```

On an slightly unrelated note, I just had a thought.  Is the "acksPerPartition" map actually reflecting "acksPerReplica"?  I have inspected the data before, so I feel pretty confident that it is per partition, but I am not 100% sure now and don't have access to verify at the moment.