Re-align downgrade whitespace logic to match upgrade whitespace

Downgrade whitespace now follows the same logic as upgrade, and will downgrade a whitespace element just to the left of the step, and to the left of the next step to the right.

Using step iterators instead of position iterators also fixes some failing operation tests by ensuring one step to the right is checked irrespective of how many positions there are between steps.