Rework ChangeRecorder to make sub-classing easier.