Derive configs

A config can be derived from another config in Project.meta like this:
ExecutableConfig A
LibraryConfig B, extends: A
CustomConfig C, extends: B
ExecutableConfig D, extends: C
The config type of the parent config does not matter, but only settings which are valid in BOTH configs will be inherited.
In the example above D gets the dependencies from A, because "Dependency" is valid in all configs, but D does not get the "Files" from A, because "Files" is not valid in CustomConfig.

The following listing shows HOW settings will be derived:

SettingDerived
Dependency parent + child
ExternalLibrary
ExternalLibrarySearchPath
UserLibrary
parent + child (ordered by line number!)
PreSteps parent + child
PostSteps parent + child
Toolchain
DefaultToolchain
Compiler, Archiver and Linker settings used from parent
if not existing in child - see below
Makefile/CommandLine
(in CustomConfig)
used from parent if not in child
Files parent + child
ExcludeFiles parent + child
IncludeDir parent + child
LinkerScript used from parent if not in child
ArtifactName used from parent if not in child
MapFile used from parent if not in child

Example for deriving toolchains:
ExecutableConfig A {
  Toolchain {
    Compiler CPP {
      Define "DefA"
    }
    Linker {
      Flags "-O3"
    }
  }
}

ExecutableConfig B, extends: A {
  Toolchain {
    Compiler CPP {
      Define "DefB1"
    }
    Compiler ASM {
      Define "DefB2"
    }
    Archiver {
      Flags "-B"
    }
  }
}
B derives from A, but B redefines Compiler CPP, therefore "DefA" will not be defined in B. But the toolchain of B does not include a Linker tag, therefore the Linker will be inherited.
The toolchain of B is treated like this:
Toolchain {
  Compiler CPP {
    Define "DefB1"
  }
  Compiler ASM {
    Define "DefB2"
  }
  Archiver {
    Flags "-B"
  }
  Linker {
    Flags "-O3"
  }
}