cmTarget: Drop internal cache of link interface usage requirements

These use a huge amount of memory that accumulates as generation
proceeds.  On the Unix Makefiles generator, only GetIncludeDirectories
and GetCompileDefinitions are even called more than once per target
(once for build files, once for dependency scanning preprocessor info).
Another approach will be needed to avoid duplicate computation in the
cases where it does occur.
cmTarget: Drop internal cache of build properties

These use a huge amount of memory that accumulates as generation
proceeds.  On the Unix Makefiles generator, only GetIncludeDirectories
and GetCompileDefinitions are even called more than once per target
(once for build files, once for dependency scanning preprocessor info).
Another approach will be needed to avoid duplicate computation in the
cases where it does occur.
cmTarget: Remove duplicate link interface map

No target is both imported and not imported so we do not need separate
link interface maps for them.
cmTarget: Refactor link interface map storage

Convert LinkInterfaceMapType and LinkImplMapType to nested maps that
index on configuration first and 'head' target second.
cmTarget: Re-order link interface map lookup logic

In GetLinkInterface, GetLinkInterfaceLibraries, and
GetImportLinkInterface, lookup the HeadToLinkInterfaceMap for the
current configuration first, and then index it by head target.  In
GetLinkImplementationLibrariesInternal, lookup the
HeadToLinkImplementationMap for the current configuration first, and
then index it by head target.
cmTarget: Move ComputeLinkImplementation* to internals

There are no external callers, and this will allow the methods to see
the full OptionalLinkImplementation internal structure.
Genex: Track whether an expression depends on the 'head' target
cmTarget: Avoid re-computing head-independent link interfaces
FindImageMagick: Find arch include dir (#15007)
Fix memory leaks in extract tar.
cmVisualStudio10TargetGenerator: Remove dupilcate line
cmIDEOption: Store mapped flag values as a vector<string>

Some FlagMap entries are ;-lists.  Store values as vector<string> so
that individual values may contain ';' characters.  Delay the
construction of the final ;-list until writing to the VS project file.
With this approach the generated file may contain ;-separated values
that contain encoded ';' characters.
cmVisualStudioGeneratorOptions: Simplify XML escaping API

Accept arguments as std::string to avoid c_str() calls.
VS: Encode mapped flag values in XML project files (#15031)

Teach cmVisualStudioGeneratorOptions to encode FlagMap entries
and the FlagString value properly in vcproj/vcxproj XML files.
Update the one existing call site that pre-encoded the value
to not do so.
VS: Encode more content correctly in vcxproj files (#15031)

In cmVisualStudio10TargetGenerator, add missing cmVS10EscapeXML
calls around paths to source and object files, custom command
dependencies and outputs, and platform name/version values.
FindImageMagick: Provide per-component include dirs (#15007)

Set the ImageMagick_<component>_INCLUDE_DIRS variable that is mentioned
in the documentation but was not set before.
Handle more than one process with sanitizer errors.

Since the Sanitizers write out one log file per process, a single
test might have more than one log file. This commit allows ctest
to read all of the log files found for a particual test.
Fix memory leak of local generator detected by LeakSanitizer.
cmGlobalGenerator: Do not re-add CMAKE_<LANG>_COMPILER

The cmGlobalGenerator::ResolveLanguageCompiler method, invoked only by
Makefile generators, contains code originally added by commit v2.4.0~796
(..., add new generators for msys and mingw, 2005-12-22) to compute the
full path to the compiler and save the result back into the cache value.
Since then the CMakeDetermine*Compiler modules have learned to resolve
the full path to the compiler and save it in CMake*Compiler.cmake files
configured in the build tree.  The value of CMAKE_<LANG>_COMPILER in the
cache is now only for reference of what the user originally specified.
The full path is now available in a normal variable of the same name,
and this is used by project code and the generators.

When the user specifies -DCMAKE_<LANG>_COMPILER=name on the command-line
of an existing build tree that uses a Makefile generator, it is first
stored in the cache with an uninitialized type.  Then later when
ResolveLanguageCompiler updates the cache entry and sets the type to
FILEPATH, cmMakefile::AddCacheDefinition does CollapseFullPath on the
"name" and ends up with something like "$PWD/name" which is unlikely to
be correct.  Furthermore, cmMakefile::AddCacheDefinition proceeds to
remove the normal variable of the same name, so the value originally
saved in CMake<LANG>Compiler.cmake is ignored and the generators use the
wrong path to the compiler.

Resolve this by dropping the code from ResolveLanguageCompiler that
touches the cache value of CMAKE_<LANG>_COMPILER.  As explained above it
is no longer needed anyway.
CMakeDetermineCompiler: Simplify CMAKE_<LANG>_COMPILER default force-cache

If find_program does not find CMAKE_<LANG>_COMPILER, use set_property()
to force the value to be that of CMAKE_<LANG>_COMPILER_INIT instead of
set().  This allows us to set the value without re-specifying the type
and documentation, thus preserving what find_program set.