Adding block strategies to the retryer to decide how to block

Allowed for different implementations of blocking to provide an alternative to Thread.sleep(). WIth a block strategy, you can block with any other concurrency mechanism. This allowed us to block using a countdown latch so that we can block and retry on demand.