REVIEW-2362,2395: Mark all of the C++ plugin stuff as incubating
REVIEW-2395,2372: Changed API of C++ compiler and linker specs to be a simple, normalised list of options
- Use basic types for all properties
- Use convention mapping to set compiler args
REVIEW-2399: Use spec type instead of binary type to find appropriate linker from ToolChain
- Introduced LinkerSpec subtypes for executable | shared library | static library
- Renamed VisualCppStaticLibraryLinker -> LibExeLinker
- Removed separate VisualCppExecutableLinker and VisualCppDynamicLibraryLinker (use LinkExeLinker)
Cleaned up CppCompile and AbstractLinkTask tasks
- Better types for task properties
- Use convention mapping where appropriate
- Removed knowledge of CppSourceSet and Library types: these are now handled in the plugin
- Use @SkipWhenEmpty instead of custom upToDateWhen (needed to work-around GRADLE-2026)
- REVIEW-2368,2369,2370,2395
REVIEW-2400: Native dependency files are part of the link task 'lib' attribute, not 'source'
When linking to dependency libraries, specify the libraries directly against the NativeBinary, rather than the component
- This is not intended as a long-term solution, but for now permits an executable to be build against either a static or shared library.
   - Longer term, library dependencies will be discovered and wired into binaries based on component relationships, together with additional meta-data
- Added NativeBinary.libs, a set of LibraryBinary instances, that is used to find inputs for linking
- Moved outputFile property from NativeComponent to NativeBinary
   - Use convention mapping to specify default for project
- Moved builtBy method and 'implements Buildable' from NativeComponent to NativeBinary
- REVIEW-2368: Return specialised component types from NativeBinary subtypes