Use CppCompileSpec interface everywhere instead of implementation class
- Renamed GppCompileSpec -> DefaultCppCompileSpec, GppLibraryCompileSpec -> DefaultCppLibraryCompileSpec
REVIEW-2346: some cleanup after review.

- use Fileresolver instead of project.file where possible
- avoid using "project.getServices().get", instead inject services directly
- minor other tweaks
REVIEW-2346: Fail with decent error message when Maven2Gradle conversion fails.
fix deprecation warnings in gradle build
REVIEW-2203: escape groovy strings in template files / encode generated files with utf-8
dont lookup placeholder tasks when using camel case execution.
Separated concept of a binary ToolChain from the actual compiler
- Pull workdir up to BinaryCompileSpec and removed unnecessary CompileSpec interface
- Renamed CompilerAdapter -> ToolChainAdapter, CompilerRegistry->ToolChainRegistry
- Currently, ToolChain has a single createCompiler() method
Changed the test repository fixtures to generate content such that the length of each artifact changes each time publishWithChangedContent() is called. Also fixed sha1 and md5 checksum generation to include leading '0'.
Fixes for ivy publishing int tests.
Moved outputFile property to (internal) BinaryCompileSpec and removed (public) CompileSpec.
Removed ClassDirectoryBinary.getTaskBaseName()
Some tweaks to DefaultClassDirectoryBinary.toString() and removed unused resourcesTask property.
Added some coverage to verify that the tooling API client receives exactly the same output as if running Gradle from the command-line.
Separated compiling and linking for C++ projects
- Added ToolChain.createLinker() so that a single toolchain can provide multiple compilers and a single linker
- CppCompile task now executes compiler with '-c', so that it doesn't perform linking
- Introduced LinkExecutable and LinkSharedBinary tasks that take the compiled object files and run the linker
- Added separate linkerArgs to NativeComponent and NativeBinary
- Pending:
  - Not yet tested on Windows
  - Requires a major package reorganisation
Fix task names for CppCompile tasks
- Added NativeBinary.getTaskName(verb) to mirror ClassDirectoryBinary, and reuse code
Apply compiler and linker args at the end of the command-line to ensure that they take precendence
Added integration test for incremental build with C++
Introduced static libraries for C++
- Added StaticLibraryBinary type: one instance is added to binaries for each defined NativeLibrary
- Pushed NativeComponent.getOutputFile() down to NativeBinary.
   - Method temporarily remains on NativeComponent
- ToolChain returns a linker specific to the NativeBinary being produced
   - Split executable and shared library linkers for GCC and VisualC++
   - Added 'ar' based linker for static libraries with GCC toolchain
   - Windows 'link.exe' based linker not yet done
- Merged LibraryLinkerSpec into LinkerSpec
- Moved separate CompileSpecToArguments implementations into the Compiler implementations they relate to
Fixed handling of native dependency sets in C++ compiling/linking
Added placeholder javadoc, to satisfy checkstyle