Extract interface from CommandLineTool

* Rename CommandLineTool to DefaultCommandLineTool
* Introduce CommandLineTool interface with single execute method
Make msvcpp and gcc NativeCompilers look similar
Extract differences between msvcpp and gcc toolchains

* Create GccOutputFileArgTransformer
* Create VisualCppOutputFileArgTransformer
* Push toolchain specific methods to the underlying
  specific implementations (e.g., CCompiler)
Collapse NativeCompiler abstract classes into one

* Move NativeCompiler to o.g...toolchain.internal.
* Make internal.gcc.* and internal.msvcpp.* compilers extend new
  common NativeCompiler
Rename some variables/classes in nativeplatform toolchain

* Rename OptionsFileArgTransformer to OptionsFileArgWriter
* Rename related Gcc and VisualCpp implementations
* Rename references to 'compiler' in DefaultCommandLineTool
Add dummy implementation of NativeCompiler for test harnesses
Use Transformers.noOpTransformer vs homegrown one
Introduce OutputFileArgTransformer to replace long type signature of Transformer<List<String>, File>
Capture current bad behavior
Add tests for OptionFileArgsWriters
Find object file extension for MSVCPP the same way as GCC
Add parallelization to NativeCompiler

* Make CommandLineTool a Named thing
* Create a DefaultExecutorFactory on each NativeCompiler.execute()
* Add toRunnableExecution to CommandLineTool
* Refactor existing execute() in DefaultCommandLineTool to delegate
  to internal execute()
* Add check for org.gradle.parallel.native to temporarily turn on/off
  native parallelization builds
* Create StoppableExecutor implementation that re-uses the calling thread
  for non-parallel executions
Rework NativeCompiler to use ArgsTransformer with options.txt

* Rework SingleSourceCompileArgTransformer to only add source arguments
    - Extract output file arg transformer into separate base class
    - Make VisualCpp/Gcc OutputFileArgTransformer add output args
* Change OptionsFileArgsWriter to follow the same pattern as above
    - Take List<String>, produce List<String> instead of modifying in
      place
* Use CompileSpecToArgsTransformerChain to convert from
   Spec -> List<String>
Clear post args actions on per-file invocations
Simplify args transformers in NativeCompiler
Add tests for NativeCompiler C compilers only
Make OptionsFileArgsWriters only Action executors again

* Fix typo of rename of GccOptionsFileArgsTransformer
* Remove Transformer<List, List> methods
Cleanup some unused ArgsTransformer classes
Limit parallel native compile to 4 threads if org.gradle.parallel.native is true