cmGeneratorTarget: Compute the object directory early.

Ensure it is populated before tracing dependencies.
cmTarget: Use GetSourceFiles for languages.
cmTarget: Rename AddSource method for backward compatibility.

Add a new AddSource method for future use.
cmSourceFileLocation: Make copyable and assignable.

This allows using it in containers and algorithms.
cmTarget: Add a method to obtain list of filenames for sources.
cmTarget: Use string API to add sources to cmTarget objects.

Continue to call GetOrCreateSource where necessary to create
cmSourceFile objects which have the GENERATED attribute set.
cmTarget: Remove AddSourceFile method

It is no longer used.
cmTarget: Store strings instead of cmSourceFile* to represent SOURCES.

This will allow the strings to contain generator expressions.

At this point, generator expressions are still not part of the
SOURCES property when it is read.
Genex: Evaluate TARGET_OBJECTS as a normal expression.
cmStringCommand: Add GENEX_STRIP subcommand.

Strip out any generator expressions in the input string.
cmGlobalGenerator: Add interface to call ForceLinkerLanguages

Avoid calling it too early when cmGeneratorTarget instances don't
yet exist.
cmTarget: Include TARGET_OBJECTS genex in target SOURCES property.

Add policy CMP0051 to control this behavior.
cmTarget: Allow any generator expression in SOURCES property.

Remove use of UseObjectLibraries from Makefile and Ninja generators. It
is not needed now because those generators use GetExternalObjects
which already contains the objects from object libraries.

The VS10 generator calls both the UseObjectLibraries and the GetExternalObjects
methods. Ensure that duplicates are not created by skipping objects
from object libraries in handling of GetExternalObjects.

Similarly, fix Xcode object handling by skipping external objects from
OBJECT_LIBRARY usage as appropriate.

The error message in the BadSourceExpression1 test is now reported
by the generator expression evaluator, so it has different text.
cmComputeTargetDepends: Track object library depends.

Relieve cmGeneratorTarget of that responsibility.
cmGeneratorTarget: Compute consumed object libraries on demand.

Remove up-front object library computation from cmGlobalGenerator.

Adjust tests for message coming from the generator expression
evaluation.
cmTarget: Compute languages from object libraries on demand.
cmGeneratorTarget: Compute target objects on demand

Add a ComputeObjectMapping method to compute the object
names.  It takes mapping to populate as an out-parameter so
that it can be extended in the future with parameters
relevant to generator expression evaluation.

Remove the supporting cmGeneratorTarget::AddObject method. It is
no longer needed as the container member is populated directly.

The ComputeObjectMapping method is called whenever objects are
requested from the cmGeneratorTarget.  Because the Xcode generator
makes no such request, explicitly invoke the method from that
generator so that the logic of checking for bad sources in object
libraries is executed.

In a follow-up, the UseObjectLibraries usage may be replaced by a
true generator expression evaluator for TARGET_OBJECTS. That
will require generators to use cmGeneratorTarget::GetExternalObjects
which is not currently the case for Xcode and VS generators.
Merge topic 'target-sources-refactor' into next

e4b1e596 cmGeneratorTarget: Compute target objects on demand
c997d2fb cmTarget: Compute languages from object libraries on demand.
e38aa4a1 cmGeneratorTarget: Compute consumed object libraries on demand.
ff0f40ad cmComputeTargetDepends: Track object library depends.
5c394361 cmTarget: Allow any generator expression in SOURCES property.
2ce3f653 cmTarget: Include TARGET_OBJECTS genex in target SOURCES property.
22ad0fcf cmGlobalGenerator: Add interface to call ForceLinkerLanguages
28dbb98a cmStringCommand: Add GENEX_STRIP subcommand.
5586cdd4 Genex: Evaluate TARGET_OBJECTS as a normal expression.
3a7e6948 cmTarget: Store strings instead of cmSourceFile* to represent SOURCES.
80dea968 cmTarget: Remove AddSourceFile method
fed93ec3 cmTarget: Use string API to add sources to cmTarget objects.
cee09f9f cmTarget: Add a method to obtain list of filenames for sources.
44e4ccd7 cmSourceFileLocation: Make copyable and assignable.
9e559cf5 cmTarget: Rename AddSource method for backward compatibility.
bdcc3f1e cmTarget: Use GetSourceFiles for languages.
...