Changed value for maxDepth to prevent ArgumentOutOfRangeException("maxDepth") to be thrown from ctor SiteMapNodeModel
Using correct variable to add descendants to node.children
Bugfix => descending to a lower level wasn't guarded properly.

Unit tests to support correct behavior when looking for Nodes to include in the model when visibilityAffectsDescendants is set to false and descending to a lower level
Corrected some spelling mistakes in the comments of MenuHelperTest.cs.
Eliminated the class-level variable required by the FindNearestVisibleDescendants() method and changed to a ref argument so it is easier to initialize at the appropriate time.
Factored out sorting of SiteMapNodes into its own method in SiteMapNodeModel.cs. This required a new interface ISortable to be implemented in both ISiteMapNode and SiteMapNodeModel.
Added documentation for FakeSiteMap test cases (Case1 and Case2) so they are easier to understand.
Fixed SiteMapXmlReservedAttributeNameProvider so it will exclude "known" attributes from being added to the Attributes collection. This was causing each SiteMapNode to take up about double the amount of memory that it should have and will significantly improve scalability of the SiteMap.
Added validation for Controller and Area fields to ensure invalid characters are not supplied in the configuration.