IEnumerable.Clone doesn't preserve object references correctly

My solution for https://trackable.codeplex.com/workitem/40

Compared to my first attempt:
* added one more unit test for ChangeTrackingCollection.GetChanges
* slightly de-duped the code