Replace SiteMapNodeModelMapper with SiteMapNodeModel

SiteMapPathHelper.cs: checking either visibility or accessibility of
ancestors is unnecessary.
Optimize the GetDescendants and GetAncestors methods

Time complexity of the previous methods is O(N*N/2) slower than O(N) of
the new methods
Revert "Optimize the GetDescendants and GetAncestors methods"

This reverts commit 456fe806eb969f138d9d4becc2327f7d8efeace6.
Optimize the GetDescendants and GetAncestors methods

Time complexity of the previous methods is O(N*N/2) slower than O(N) of
the new methods
Reverting my previous revert "Make a version of the new patch compatible with v4"
Reverting my previous revert "Fix menu levels and tidy up the code"
Merge remote-tracking branch 'midishero/v4' into v4
Removed SiteMapNodeModelMapper, no longer in use.
Normalized SiteMapNodeModel conventions, cleaned up readability, added guard clauses to constructor, removed extraneous null checking logic and casts when assigning values, removed default constructor.