Fixed TrackableExtensions.GetChanges() does not return modified Items if more than one ITrackable Members available.
Turns out, that hasLocalDownstreamChanges for Childs is overridden if more than one ITrackable members are available or modified ITrackable is not the last.
Only happens in the 1-1 and M-1 path.
Added Test and TestModelClass
Fixed GetChanges: Already visited items in object-graph were ignored and have not been set to null if unchanged or deleted
Lets say one was unchanged, so if it is more then once availible in the object graph they will appeared different.
 the first one would be set to null, because !visitationHelper.IsVisited(trackableRef) , if the same entity appears in another node of object graph, it will not been nulled, because visitationHelper.IsVisited(trackableRef) == true
So for those we have to check (TrackingState == unchanged or deleted )and if so then set to null.
Merge pull request #14 from edi0177/develop

Fixed TrackableExtensions.GetChanges() does not return modified Items if more than one ITrackable Members available.

Turns out, that hasLocalDownstreamChanges for Childs is overridden if more than one ITrackable members are available or modified ITrackable is not the last.
Only happens in the 1-1 and M-1 path.
Added Test and TestModelClass
Slightly improve readability and test coverage
See how it fails on read-only/calculated properties
Only update property if writeable, so we can use readonly (calculated) properties

Somewhat simpler than https://github.com/tonysneed/trackable-entities/pull/13
Interface INavigationPropertyInspector allows to override the default mechanism of inspecting the entity navigation properties (entity references and entity collections)

All occurrences of PropertyInfo.GetValue have been encapsulated in the DefaultNavigationPropertyInspector class. PropertyInfo.GetValue should no longer be directly used throughout the library, otherwise it may provoke unwanted effects if the property getters are non-trivial (e.g. implement lazy loading). Applications are also encouraged to switch to the new syntax:

foreach (var navProp in entity.GetNavigationProperties())
{
    // 1-1 and M-1 properties
    foreach (var refProp in navProp.AsReferenceProperty())
        DoSomething(refProp.EntityReference);

    // 1-M and M-M properties
    foreach (var colProp in navProp.AsCollectionProperty())
        DoSomething(colProp.EntityCollection);
}

Advantages over the standard "loop-all-properties-GetValue-and-cast" technique
1. PropertyInfo.GetValue is unfriendly to lazy loading, whilst the custom implementation of the INavigationPropertyInspector interface has chance to terminate visitation of the uninitialized navigation properties
2. Easier to debug the "for-loops". No need to tap F10 like mad to skip the non-navigation properties when you are only interested in visiting nav props
3. More narrow scope for 'refProp' and 'colProp' variables == safer code
4. Elegant casting syntax, e.g. entity.GetNavigationProperties().OfCollectionType<IList>() returns collection navigation properties of type IList
Json serializer must skip navigation properties with null values