Collect changes between roots. FromRoot and fromVersion should be used
to determine a starting point in the toRoot, from which changes should be
collected. If fromRoot and toRoot are not related to each other, i.e. there
is no meaningful way to collect changes between them - implementation should
return an empty collection. Returned modifications should belong to the toRoot.
fromRoot - root from which to collect changes
fromVersion - fromRoot version
toRoot - root to which changes should be collected