Replace successes channel with individual promises

Makes tracking success of individual messages much simpler and friendly to
order-dependent things. Also provides a more efficient solution to the first
half of #187 (it lets us get rid of the mutex in SimpleProducer).