ExternalProject: Reattempt download when verification fails.

When downloading an URL with ExternalProject, reattempt the download three
times if the file hash verification fails.

The re-attempt is limited to non-local URL's.  The same download CMake script
is re-used after removing any file that resulted from the previous download
attempt.  Up to three re-attempts are performed.
file DOWNLOAD: Add test for bad hash.
file DOWNLOAD: Test non-zero return status.
file DOWNLOAD: Display the curl result status when a hash mismatch occurs.
Ninja: Normalize paths of CMake re-run rule dependencies

Send all implicit dependencies through ConvertToNinjaPath.
Add CMakeCache.txt before uniquifying the list.
ctest_update: Handle P4 unknown revisions more robustly

Mark unknown revisions as such and fail instead of reporting revision 0.
Otherwise CTest reports massive file updates between revisions when the
server timeouts while trying to fetch the current revision number.
cmMakefile: Make GetProperty const.
cmSourceFileLocation: Use a const cmMakefile.
cmSourceFile: Use a const cmMakefile.
cmMakefile: Constify some cmSourceGroup related code.
cmSourceGroup: Fix method name capitalization.

Adhere to the dominant style.
cmCacheManager: Consify version accessors.
cmMakefile: Constify policies accessors.
cmMakefile: Consify custom command API.
cmMakefile: Remove method declarations with no implementation.
cmMakefile: Remove non-const version of method

The const version suffices.
cmMakefile: Trivially constify some methods.
cmMakefile: Make FindSourceGroup const.

Return a pointer instead of a reference.  This allows making the accessor
const with the least impact.
cmMakefile: Make ConfigureString const.
Help: Document non-use of std::set::insert.

As found in commit 8e7c207e (Use a manual loop to insert into
set::set., 2012-09-15).