Re-implement .changes_against to avoid side effects

As even if .dup or .clone are called on the reference record to be
compared against, calling the attribute method setters will change
the record itself.
Speed up changes generation a bit
Add some specs for TimeMachine#changes_against