implement multi-row-aware left/right cycling through workspaces

If workspace cycling is enabled, and there are multiple workspace rows, the current row is incremented or decremented as appropriate, so that you are never stuck on the same row.

Cycling on up or down is not taken care of (and I don't think it is desirable).