Support versioned dependencies

:construction: 

Currently it's a pain if one wants to have different versions of softwares in different projects when using omnibus. This approach introduces a new DSL attribute on projects called `software_version_pinning` (looking for a better name) which can be used to pin the version of a software component at the project level. 

Example usage of it would be to update chef.rb and chef-dk.rb in omnibus-chef repo as below:

```ruby
# chef.rb in omnibus-chef
software_version_pinning = {
   "ruby" => "1.9.3-p484"
}

# chef-dk.rb in omnibus-chef
software_version_pinning = {
   "ruby" => "2.1.0-p121"
}
```

We've considered achieving this goal by introducing different software configurations with different names but it took us to dependency hell because of inter-software dependencies. 

This PR aims to vet this approach and make sure we agree before moving further into it. 

Note that this will likely be a breaking change because it changes the keys in the `software_map` from file names to the names specified in the software definitions. We will most likely couple this with another breaking change coming from @danielsdeleo about producing dmg files by default on Mac.

@lamont-granquist / @schisamo thoughts? 

One question for you @schisamo: How would this impact the build speed improvements that we're bringing in?