Refactor out the necessity for Hermann::Timeout and just rely in a Ruby-based busyloop
Introduce a wrapper struct to make message delivery callbacks able to change Producer data

This will help with determining whether we're no longer connected due to
failures after a push of a message