There is a lot of duplicate code in each of the `Retry.While` methods that through overloads or functional programming should be removed.