Adding retry logic

This turned out to be a bigger change than I had anticipated since
retrying forces us to be more specific about the type of errors that
we need  to handle.
Did I miss anything or am I including something that shouldn't be retryable (sp?)?