[dsl] Support: project 'defaults'

This allows you to supply default values that each project will have assigned to it.
[lib] You now: require 'european-carry-all', not; require 'european'
[spec] Creating a distinct directory for "DSL" related specs

specs in this directory will be concerned with a single aspect of the
DSL
[spec] Update first DSL spec to be more about the DSL, less about a CarryAll
[spec] Rearrange and change spec names to further center on DSL
[dsl, spec] Explicit specs for existing "project" DSL
[dsl, spec] Explicit specs for "build_system" DSL
[spec] Make "project_spec" more like "build_system_spec"
[dsl, spec] Explicit specs for "source_system" DSL
[dsl, spec] General spec for DSL
[spec] Remove (now) duplicated "DSL" stuff from carry_all
[dsl] Support stand-alone 'build's
[dsl] Provide lookups for items via "plural_noun named: 'name'"

Previously, was using the bare hash. Which went like this:

  carry_all.projects['awesome-cat']

Now, it goes like this:

  carry_all.project named: 'awesome-cat'

Also.. you used to get a list of projects known that you were getting
a hash and that you had to grab the values of that hash. To get a list
of projects you'd go like thie:

  carry_all.projects.values # known that projects returns a Hash

Now you go like this:

  carry_all.projects