Check lazily for whether parameters are targets

The target_link_libraries command can evaluate lazily whether
a parameter is a target, so these commands should too.

In the case of target_include_directories, content is either an absolute
path or a target. So, if it is not an absolute path we can be sure
it is a target at generate-time (or report an error). That is done
by using the TARGET_PROPERTY command without first checking if the
target is defined.

There is the disadvantage that the case of

 target_compile_definitions(foo PRIVATE SOME_DEFINE)

now expands in the COMPILE_DEFINITIONS property to

 "$<$<TARGET_DEFINED:SOME_DEFINE>:$<TARGET_PROPERTY:SOME_DEFINE,INTERFACE_COMPILE_DEFINITIONS>;$<$<NOT:$<TARGET_DEFINED:SOME_DEFINE>>:SOME_DEFINE>"

This may be a reason to document that all-uppercase content
to target_compile_definitions is always treated as a compile
definition, never as a target (but not vice-versa). Content such
as 'SOME_DEFINE=bar' is already treated only as a define, as it
does not match the targetNameValidator.
Merge topic 'interface-commands-lazy-target-check' into next

6fcdd6e Check lazily for whether parameters are targets