Represents a gear that can cycle through states. It keeps track of the states available and which state it is currently in.
Returns a 2D vector containing every unique combination of states of the gears. Begins by resetting each gear to it's initial state and progressively cycling each gear from left to right.
Returns a vector containing each state of the gears.
Loops through each gear calling reset() on each.