Added different GCC4 versions for testing

- MultipleToolChainIntegrationTest will pass with a single toolchain available
- No longer pretend to test GCC3 versions on CI, since they don't work
Ensure that the cache is locked when resolving a parent/included module during descriptor parsing
Integ tests fail better when toolchain is not available (with -PtestAllPlatforms)
Don't run test on Unknown OS
Added public types for Gcc and VisualCpp tool chains

- Extracted 'Tool' type for setting executable name of compilers, linker, etc
- Code for configuring Tools and Paths for ToolChain is now in AbstractToolChain
- Renamed org.gradle.nativecode.toolchain.internal.Tool -> ToolType
Ensure that ignored tests don't trigger before() action in MultiTestRunner
C++ spec update to reflect current development
Get c-with-assembler sample working on MinGW and cygwin
Make it possible to create NativeBinary model objects without an available ToolChain
Use the toolchain as a variant dimension whenever multiple tool chains are defined

- So even if only 1 toolchain is available, if multiple are defined then the tool chain
  name will form part of the task names and binary paths.
Fix samples for single default tool chain

- Use type comparison instead of instance comparison when applying toolchain-specific configuration
- Added breaking change to release notes
REVIEW-2768: Add getNames() to NamedDomainObjectCollection
REVIEW-2768:	some more cleanup and refactorings to placeholder handling

- TaskNameResolver does not need to know placeholder actions
- add coverage for preferred explicit tasks
REVIEW-2770: add integration test for unsupported task parameters
add missing header
GRADLE-2744: when setting ProjectDescriptor#projectDir use FileResolver instead of just canonicalising the parameter.
fix test on windows boxes
Inlined superclasses into LoopbackDependencyResolver, as they are only used by that class.
Removed unused class.
Moved responsibility for probing build action classpath from consumer to provider.