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
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.
Revert "genex: Allow genex caching of config genex on single-config generators"

This reverts commit 93d441b5341b3288f113d7e9c3a488bb23497547.
Merge topic 'dev/target-fastpaths' into next

03e1db88 Revert "genex: Allow genex caching of config genex on single-config generators"
93d441b5 genex: Allow genex caching of config genex on single-config generators
a9c9b66c cmTarget: use a hash_map for cmTargets typedef
bcb6dbc1 cmTarget: help the optimizer a bit
679f3dee cmTarget: use hash_set for sets of strings
23d6520d cmTarget: Allow caching of empty genex expansions
cd54f1db cmTarget: Only copy GenEx expansions when necessary
b75fc0e1 cmTarget: Don't set properties on custom targets
66076915 cmTarget: Use static strings for special property names
cebefa71 cmTarget: Sort special property checks
97ce676e cmTarget: Fast path for regular properties