Moved the change tracker implementations to their own file

They were private classes but their implementation is significant.
They're now internal instead of private so the parent class isn't used
as a private namespace.