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

Skips lots of unnecessary string comparisons.
cmTarget: Factor out common code
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
genex: Allow genex caching of config genex on single-config generators

The single-config generators do not make $<CONFIGURATION> and $<CONFIG>
generator expressions context-sensitive.
cmTarget: use hash_set for sets of strings

20% (!) performance improvement with Make's generate step on Slicer.
cmTarget: help the optimizer a bit
cmTarget: use a hash_map for cmTargets typedef
Merge topic 'dev/target-fastpaths' into next

d0671f81 cmTarget: use a hash_map for cmTargets typedef
16daa081 cmTarget: help the optimizer a bit
52f88e53 cmTarget: use hash_set for sets of strings
fef60ce6 genex: Allow genex caching of config genex on single-config generators
5a121ddd cmTarget: Allow caching of empty genex expansions
ea0b1568 cmTarget: Only copy GenEx expansions when necessary
99672f23 cmTarget: Don't set properties on custom targets
b035f02d cmTarget: Use static strings for special property names
104f3232 cmTarget: Sort special property checks
87abdb83 cmTarget: Fast path for regular properties
4cfa918a cmTarget: Factor out common code
85242b7d cmTarget: Use else/if trees rather than an if tree
fixup! cmTarget: Use static strings for special property names
Merge topic 'dev/target-fastpaths' into next

dccda39c fixup! cmTarget: Use static strings for special property names
fixup! cmTarget: Use static strings for special property names
Merge topic 'dev/target-fastpaths' into next

086201fc fixup! cmTarget: Use static strings for special property names