Make RetryingOperationRunner easier to extend

Adds a new protected shouldRetry() method to the RetryingOperationRunner
which allows users to extend the runner and override the method to
control the circumstances in which they wish a retry to happen