VariantGenerator Spec coverage + Create Cartesian set builder for generating variants

 - [x] Extract `VariantGenerator::getPermutations` as `CartesianSetBuilder`.
 - [ ] Cover `VariantGenerator` with specs.