DiffProcessor: factorize additions into copies where possible

If an element is added which already exists in the source and is unchanged in
the target, make the addition a copy instead.
DiffProcessor: make final

We won't spy() on it after all.
DiffProcessor: detect removed values which are added again

In this case, fuse the removal and addition operation into a move and remove the
removal operation.
DiffOperation: arguments rename, add comments