Use StateQueue object, in preparation for different implementations
SimpleQueue value constructor
Raise `error` on undefined `zero_position` state
Renamed `swap` to `move_to_zero` - far more sensible!