Refactor: encapsulate change list a bit more

We want to change this detail, hence encapsulate it a bit more. This
is not the perfect interface yet, but I'll get to that later (if
ever).
Refactor more

This refactoring is also needed to replace the representation of
changes.
Switch to bag change representation discussed in ps-mr/ilc#52

This new representation allows stating compactly that a change should
be applied to multiple copies of the same element.

This commit is a more compact version of the change in branch
topic/hacky-fix, which will now be closed.