Move the implementation of `(de)hydrate`, `hydrated`, and `detectChangesInRecords` into `AbstractChangeDetector`. Add comments clarifying the contract between `AbstractChangeDetector` and its subclasses. Closes #3245
Move the implementation of `(de)hydrate`, `hydrated`, and `detectChangesInRecords` into `AbstractChangeDetector`. Add comments clarifying the contract between `AbstractChangeDetector` and its subclasses. Closes #3245