Add Producer.retry

This implementation allows API consumers the choice of retry strategy without being overly burdensome.

Resolves #1046.
(Either way, I dig your solution.)