better implementation of cartesian product in Set

See various implementation choices and benchmarks at
  https://github.com/ocaml-batteries-team/batteries-included/pull/499#issuecomment-31937964