Add Gen.retryUntil, a looping version of Gen.suchThat

retryUntil will evaluate the generator continously, until
the specified condition is fulfilled. This method must be
used with care, since you can end up in an infinite loop
if the condition never is fulfilled. On the other hand,
retryUntil can avoid a lot of discarded tests if used on
generators with a condition that you know will be true
"often enough".

For example, if you want to generate a list of only odd
numbers you might do the following:

val g = listOf(arbitrary[Int] suchThat (_ % 2 == 1))

However, that generator will never succeed, since it is
highly unlikely that all randomly generated integers are
odd. If you use that generator in a property, you will
only get discarded tests.

If you use retryUntil instead, you will waste some cycles
each time an even integer is generated, but since half of
the integers will be odd from the start, the generator
will converge quickly. The resulting generator is guaranteed
to never fail, and you will get no discarded tests.

val g = listOf(arbitrary[Int] retryUntil (_ % 2 == 1))

Of course, the best thing would be to use a generator that
produces odd number in a proper way.