`merge_chains` now returns a tuple of the resultant checkpoint AND
changeset. This is arguably a more readable/understandable setup.
To do this, we had to create `CheckPoint::apply_changeset` which is kept
as a private method.
Thank you @ValuedMammal for the suggestion.
Co-authored-by: valuedvalued mammal <valuedmammal@protonmail.com>