now getting a cartesian product of different options - built from reading all product variants, getting the option types available, and combining them