add chef_api and site DSL functions

add acceptance tests for adding default locations
add add_location function to Berksfile for adding default locations

added by the DSL functions site and chef_api
:opscode is a valid value for initializing a SiteLocation
fix desired output of new install features
add abstract functions to DSl which must be implemented by includer
make Berksfile#add_location public and improve docs
add AbstractFunction error to replace NotImplementedErrors
decouple DSL from CookbookSource class

fix issue where metadata would not provide an exact version lock on the version in the metadata
clean up CookbookSource initializer to be much friendlier for internals and not appear like a DSL function
improve function documentation
refactor Resolver initializer to take a hash of options

added locations option for specifying default locations to look for dependent cookbooks
add a default location to the Resolver if none was specified in options
allow locations: option hash to CookbookSource#initialize

pass the default locations from the Resolver to new CookbookSources initialized
for dependencies that have not had a CookbookSource defined already.
fix uninitialized constant error after rebase
fix broken lockfile features
refactor default_locations features into their own cucumber feature file
improve to_s function on cookbook_source
improve unit testing on Berksfile#add_source and add_location
move default locations logic to Downloader from Resolver
ensure two default locations of the same type and value cannot be added to a Berksfile
refactor (simplify) downloader and uploader
fix issue where formatter was not printing the location used to download the cookbook

download function in downloader now returns the cached_cookbook and the location used to download the cookbook