Attempts to make getting combinations of things easier with the use of gears and simple numeric states!
let mut gears = vec![Gear::new(2),Gear::new(2)];
let combos = get_gears_combinations(&mut gears);
assert_eq!(vec![vec![0,0],vec![1,0],vec![0,1],vec![1,1]],combos);