Wraps INotifyPropertyChanged. Responsibility: - Handle INotifyPropertyChanged.PropertyChanged and fire Changed.
- Create a TrackedObject for each eligible property (see IsEligibleProperty) and handle its Changed event. Keep track of these properties in _registeredProperties so that they can be cleaned up later.
- If an eligible property is assigned with a new object, create a TrackedObject for the new value and listen to its Changed event; at the same time, dispose old value in _registeredProperties so that it can be garbaged collected.