Refactor and seperate search path construction for find commands

Prior to this commit, the set of search paths to traverse for find commands
was incrementally constructed.  This change allows each group of paths, i.e.
CMakeVariablePaths, UserHintsPaths, SystemEnvironmentPaths, etc. to be
constructed and manipulated independently, and then all combined togethor.
Encapsulate search path manipulation functions into a seperate class.

The functions for adding the various different types of paths have been
factored out into a new class, cmSearchPath.  It is to be used as a helper
container class for the various find_* commands.
Use containers of labeled search paths instead of individual members

Manage classes of search paths in labeled containers.  This removes the
need to have a seperate member variable for each type of search path, but
also allows path types to be grouped togethor in various different ways
and manipulated as subsets of the full set of search paths.
Add workaround for VS6.

VS6 fails to lookup protected class definitions in a parent class.  The
workaround is to make them public instead only when compiling for VS6.
Merge topic 'refactor-search-path-construction' into next

4e941134 Add workaround for VS6.
498e0a1c Use containers of labeled search paths instead of individual members
3c85babc Encapsulate search path manipulation functions into a seperate class.
ac9c06c4 Refactor and seperate search path construction for find commands