Generates a value that satisfies a predicate.
Shrinks of the generated value will also satisfy the predicate. From
the original generator's shrink tree, any values that fail the
predicate will be removed, but any subsequent shrinks that satisfy it
will be retained. Compared to
filter, shrinking may be slower
but will be optimal.
It's possible that the predicate will never pass, or will only pass at
a larger size than we're currently running at. To avoid looping
forever, we limit the number of retries, and grow the size with each
retry. If we retry too many times then the whole generator is
discarded.