Use CppCompileSpec interface everywhere instead of implementation class
- Renamed GppCompileSpec -> DefaultCppCompileSpec, GppLibraryCompileSpec -> DefaultCppLibraryCompileSpec
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
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
Merged ongoing CPP development into master (easier to deal with merge conflicts than rebase)