cmGeneratorExpressionNode: implement `COMPILE_ONLY` genex
This generator expression is the inverse of LINK_ONLY
and only coveys
usage requirements for the purposes of compilation. Its intended use is
to avoid needing to export targets that do not have link usage
requirements (e.g., header-only libraries) when used by another target.
It will also be used to represent private usage requirements on exported C++ module-containing targets in the future.
Eventually there should be logic to collapse nesting of
$<COMPILE_ONLY>
and $<LINK_ONLY>
when generating instances of
either. A TODO is left in the code for this case.
See: #15415