Implement modify() on some of the constraints

When the executor for a task does not change, it means we are only
moving the task across the schedule for a particular machine. In that
case, it is likely that some periods will be unchanged. (The old and the
new position of the task overlap in places.) Before this commit, we
would remove every old position and then add every new position. This
commit changes that, only adding/removing those positions that have
actually changed, while leaving the other intact.

Represents an average of 12 % ACC increase.