Properly handle changing scopes

Unless the position is explicitly supplied when changing scopes, the
item should be added to the end of the list. To do this, we need to
keep track of whether the position column has been set. Merely tracking
_changed doesn’t cut it as sometimes we will supply a new position that
was the same as the position the item had in the old scope.

increment_positions_on_lower_items now has an avoid clause and I’ve
fixed a buggy test and adjusted the expectations of another to reflect
the proper logic.