cmTarget: Teach ExpandLinkItems how to support $<LINK_ONLY>

Add a 'usage_requirements_only' parameter to ExpandLinkItems so that it
knows whether to use SetTransitivePropertiesOnly while evaluating
generator expressions.  Update existing call sites to pass 'false' since
they are for linking and not usage requirements.
cmTarget: De-duplicate link interface genex code for $<LINK_ONLY>

Simplify the implementation of GetTransitivePropertyTargets by using
ExpandLinkItems with usage_requirements_only==true to evaluate the
generator expressions in the link interface for us.
cmTarget: Teach GetLinkInterfaceLibraries to support $<LINK_ONLY>

Add a 'usage_requirements_only' parameter to GetLinkInterfaceLibraries
and supporting internal APIs to pass through to ExpandLinkItems so it
knows whether to use SetTransitivePropertiesOnly while evaluating
generator expressions.
cmTarget: De-duplicate link interface evaluation for $<LINK_ONLY>

Teach GetTransitivePropertyTargets to use the GetLinkInterfaceLibraries
method with usage_requirements_only==true instead of evaluating the
INTERFACE_LINK_LIBRARIES property directly.  This avoids duplicate
evaluations and makes use of the caching done by
GetLinkInterfaceLibraries.
cmTarget: Remove unnecessary 'mutable' markup

Members of the cmTargetInternals structure do not need to be made
'mutable' even to cache data because there is no reason for the
internal methods to be 'const'.
cmTarget: Refactor internal LinkImplementation map

If ComputeLinkImplementationLanguages were ever to cause
GetLinkImplementationLibraries to be invoked then a LinkImplMap entry
may appear in the middle of computing it in GetLinkInformation.  Instead
create the map entry up front and store in it boolean values indicating
which pieces of the LinkImplementation structure have been populated.
This approach leads to shorter code that is easier to follow too.
cmTarget: Shorten a long line in ComputeLinkImplementation

Prepare to change its indentation without exceeding line length limit.
cmTarget: Pre-indent a block in ComputeLinkImplementation

Prepare to move it into another block without extra whitespace changes.
cmTarget: Refactor ComputeLinkImplementation

Use LinkImplementationPropertyEntries directly instead of asking
GetProperty to construct a string for LINK_LIBRARIES.  This gives us
access to the entry backtraces.
cmTarget: Add backtraces to LinkImplementation library list
cmTarget: Add method to add usage requirements from linked interfaces

Create a cmTargetInternals::AddInterfaceEntries method to construct a
$<TARGET_PROPERTY:tgt,INTERFACE_XYZ> generator expression and evaluate
it for every target in the link implementation.  This will be useful to
de-duplicate such evaluation for each usage requirement separately.
cmTarget: Simplify INTERFACE_SOURCES usage requirement lookup

Use the AddInterfaceEntries helper to avoid duplication.
cmTarget: Simplify INTERFACE_COMPILE_OPTIONS usage requirement lookup

Use the AddInterfaceEntries helper to avoid duplication.
cmTarget: Simplify INTERFACE_COMPILE_DEFINITIONS usage requirement lookup

Use the AddInterfaceEntries helper to avoid duplication.
cmTarget: Simplify INTERFACE_COMPILE_FEATURES usage requirement lookup

Use the AddInterfaceEntries helper to avoid duplication.
WIP: cmTarget: Simplify INTERFACE_INCLUDE_DIRECTORIES usage requirement lookup

Use the AddInterfaceEntries helper to avoid duplication.

Update the RunCMake.CompatibleInterface test DebugProperties case
expected output for the new order of the messages.

TODO: Fix the RunCMake.CMP0027 test failure.