De-duplicate shared library targets in generated link lines

The linker will bring in shared libraries as a whole and use them even
for symbols that are needed by entries later in the link line.
Therefore we do not need to repeat them.  De-duplicate link entries that
we know are shared libraries because we have a cmTarget associated with
them.

Tested-by: Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
Help: Add notes for topic 'link-line-dedup'
Check*CompilerFlag: Add pattern for Fujitsu compiler (#15051)
Check*: Allow result variables to contain regex special characters (#14923)

Prior to the existence of the if(DEFINED) condition, many of our Check
modules implemented the condition with a hack that takes advantage of
the auto-dereference behavior of the if() command to detect if a
variable is defined.  The hack has the form:

 if("${VAR} MATCHES "^${VAR}$")

where "${VAR}" is a macro argument reference.  However, this does not
work when the variable named in the macro argument contains characters
that have special meaning in regular expressions, such as '+'.  Run the
command

 git grep -E 'if\("\$\{.*\}" MATCHES "\^\$\{.*\}\$"\)' -- Modules/Check*

to identify lines with this problem.  Use if(NOT DEFINED) instead.
CPack: Expand mark_as_advanced arguments to one-per-line

This will allow new values to be added without editing existing lines.
CPack: Sort packaging options lexicographically

This will allow new options to be added more cleanly.
VS: Add missing newline after .vcxproj user prop import line
VS: Refactor logic deciding to add "Deploy" to the .sln file

Move the condition to a "NeedsDeploy" virtual method that can be
overridden by more recent VS generators.
VS: Add internal API to get system name and version

Add cmGlobalVisualStudio10Generator::GetSystemName and GetSystemVersion
methods to access the corresponding members publicly.
cmGlobalGenerator: Take Build output argument by reference

No call sites pass NULL to the output argument, so take it by
reference to avoid the if(output) conditions.  Propagate the
change through the TryCompile APIs that call it.
Merge topic 'link-line-dedup'

ccec6df8 Help: Add notes for topic 'link-line-dedup'
9f7e27fc De-duplicate shared library targets in generated link lines
Merge topic 'check-flag-for-fujitsu'

5570d8d3 Check*CompilerFlag: Add pattern for Fujitsu compiler (#15051)
Merge topic 'fix-check-module-DEFINED-tests'

4f2fcce4 Check*: Allow result variables to contain regex special characters (#14923)
Merge topic 'cpack-options-sort'

58f3d96d CPack: Sort packaging options lexicographically
efb45007 CPack: Expand mark_as_advanced arguments to one-per-line
Merge topic 'vs-vcxproj-missing-newline'

66edd065 VS: Add missing newline after .vcxproj user prop import line
Merge topic 'vs-refactor-sln-deploy'

fe161dc3 VS: Refactor logic deciding to add "Deploy" to the .sln file
Merge topic 'vs-internal-system-apis'

0a5fe279 VS: Add internal API to get system name and version
Merge topic 'cmGlobalGenerator-Build-output-ref'

30983ebe cmGlobalGenerator: Take Build output argument by reference