Add CartesianGenerator and tests
Refactor CartesianGenerator methods
Refactor CartesianMutation to retry if mutated gene is same as old