rewrite (and/c pair? (listof ...)) into (non-empty-listof ...)

related to PR 14832
generalize the random contract generation APIs to allow
a more dynamic notion of failure

use that to try harder with and/c contracts. In particular,
the contract system now tries to generate the arguments
on their own and then uses the other arguments to filter
(when they are all flat contracts, of course)

closes PR 14832