Simplify a bunch recursive algorithms
Code cleanup
New method ObjectVisitationHelper.FindVisited
Fix a few bugs in IdMatcher
Extend `LoadRelatedEntities_Should_Populate_Order_With_Customer_With_Setting` unit test to demonstrate the (old) shortcoming in `LoadRelatedEntities` function, which would have troubles loading circularly referencing entities: either a complete "no go" or at least could lead to duplicated entities (same ID but different instances)
LoadRelatedEntities couldn't properly handle circular references
See previous commit for details
Add NuGet package 'Microsoft.Bcl.Immutable.1.0.34'
Reimplement `DbContextExtensions.ApplyChanges` method using ImmutableHashSet

It appear to be the only recursive algorithm which requires the advanced visitation strategy: if there exist two ways to reach a certain entity, then both must be walked completely
Mutable ObjectVisitationHelper with a cleaner method TryVisit = IsVisited + Visit
As it turned out none of the recursive algorithms except ApplyChanged actually need the advanced visitation strategy: if there exist two ways to reach a certain entity, then both must be walked completely. So with the mutable ObjectVisitationHelper each graph node is visited exactly once.
This should also improve the performance.