refine support for sums and products; use thew new combinators externally
add a limit on the number of elements we add on each run, to avoid
combinatorial blowup

If a type T has 10^3 elements, then product support makes any
activation of a constructor of type T*T->U run over 10^6 elements in
T*T. This can blow up very quickly.

The current solution is to limit the number of new elements we add
each time Fix requires the updated valuation. This should not cause
early termination, as Fix will detect that the result changed and keep
computing the fixpoint.

In the long term we should think of more principled throttling method:
the existing approach amounts to do exhaustive exploratoin of the
search space, and cut results to a reasonable number after the
fact. We should think of probabilistic exploration directly.
use sum support for the option type in example/rbt.ml