Merged ToolChainInternal.target() and canTargetPlatform().
GRADLE-3042 - Changed the GCC based  tool chains so that they do not require all language compilers to be available. Doesn't fix the problem yet, as g++ or clang++ are still expected at link time.

- Inlined the availability stuff from AbstractToolChain into it subclasses.
- Changed Gcc and Clang tool chains to check if platform is supported before checking if tools are available, to avoid implying that installing the tool chain will fix the problem.
- Changed Gcc and Clang tool chains to consider the tool chain available if at least one language tool is available.
- Changed GccToolChain to use gcc instead of g++ to determine Gcc version.
- Improved the exception thrown by ToolRegistry.MissingTool when attempting to use the tool.
Moved tool properties up from Gcc to PlatformConfigurableToolChain so that they are also available for Clang.
Added 'gcc compatible' tool chain int test constraint, and changed Gcc customisation int test to run against clang and gcc.
Added some int test coverage for customising the tool chain executable.
Fixed GccToolChain.target() so that it does not blow up when `gcc` is not available. Added some more Gcc tool chain configurability and discovery int test coverage.
Removed a couple of unused properties from ProjectNativeBinaryInternal.