cmTarget: Use else/if trees rather than an if tree

Skips lots of unnecessary string comparisons.
cmTarget: Factor out common code
Tests: Activate tests accidentally excluded from Xcode

The generator name is "Xcode", not "XCode".  Fix this typo.  Explicitly
exclude the SubDirSpaces test on Xcode because it does not work.  Also
tell the RunCMake.File_Generate test when Xcode is not multi-config so
it can exlcude the OutputConflict case.

Inspired-by: Daniele E. Domenichelli <daniele.domenichelli@iit.it>
Help: Identify more artifact types in QtHelp documentation.

Add identifiers for variables, properties, policies and modules.
This will allow QtCreator to show relevant documentation if it learns
more about the context of the contents of cmake files.
cmTarget: Fast path for regular properties
cmTarget: Sort special property checks

The LINK_LIBRARIES property is by *far* the most popular. Move it to the
top. TYPE is second, but with more generator expression usage, that may
change in the future.
cmTarget: Use static strings for special property names

The function is called enough that the std::string/cstr comparisons are
expensive from the strlen. Cache the strings for faster comparisons.
cmTarget: Don't set properties on custom targets

Properties are not required on custom targets.
cmTarget: Only copy GenEx expansions when necessary
cmTarget: Allow caching of empty genex expansions
cmTarget: use hash_set for sets of strings
cmTarget: help the optimizer a bit
cmTarget: use a hash_map for cmTargets typedef
VS: Make MS-tool-specific options conditional

Make blocks adding MS-tool-specific options conditional on a
new "MSTools" boolean member of cmVisualStudio10TargetGenerator.
Hard-code the member to true for now to preserve existing behavior.
Tell generators about CMAKE_SYSTEM_NAME as soon as it is known

Add a cmGlobalGenerator::SetSystemName virtual method.  Call it from
cmGlobalGenerator::EnableLanguage as soon as CMAKE_SYSTEM_NAME is known.
This will give generators a chance to adapt themselves to the target
system.  Pass the cmMakefile instance to the method so that the
generator can update it accordingly.  Return early from EnableLanguage
if SetSystemName returns false.
VS: Refactor CMAKE_FORCE_*64 platform definitions

Remove the general infrastructure for these additional platform
definitions and hard-code the only two special cases that used
it.  They are only for historical reasons so no new such cases
should be added.
VS: Remove unused method from VS 9 generator
VS: Delay platform definitions until system name is known

Move the definition of CMAKE_VS_PLATFORM_NAME and other variables that
are not needed by CMakeDetermineSystem out of the AddPlatformDefinitions
method and into a SetSystemName method.  The latter may later use
CMAKE_SYSTEM_NAME to decide what platform-specific definitions to add.
VS: Delay detection of VS 10 Express 64-bit tools

Wait until SetSystemName when the CMAKE_SYSTEM_NAME is known.
Later the decision to use 64-bit tools may depend on it.
VS: Delay getting platform name in local generator

Ask the global generator during generation instead of trying
to store it up front.  Later the global generator may not know
the platform name when it is creating the local generator.