[CLI] Added --chef_repo_path option

This will override the chef_repo_paths option in the config. When
specified, the directory is assumed to contain the entire chef repo
you want.

This option is put in place so that testing migrations using
`knife download` and `knife upload` is easier. If "override everything" is
a feature request you require, then please file a bug report
[COOKBOOKS] Added versioned_cookbooks support.

 - Adding "versioned_cookbooks true" to knife.rb turns on versioned cookbook mode
 - Cookbooks are assumed to be named such as:

cookbooks/
  apt-1.8.4
  apt-1.7.0
  postgresql-2.2.2

 - This allows for multiple versions.
 - Caveat: this commit requires the CHEF-3307 patch against chef 10-stable
[GEM] Added Gemfile for testing

 - Ignored Gemfile.lock (so that we can test Chef 10 and 11 gems)
 - Added Gemfile.local support. You can put gem dependencies in
   there, but it will not be versioned.
[COOKBOOKS] Fixed regressions when versioned_cookbooks is false
[SPEC] Refactored some of cookbook_dir_spec
[SPEC] Separated cookbooks_dir and cookbook_dir spec. Added versioned_cookbooks test
[SPEC] Added more versioned cookbooks tests
[SPEC] Added versioned cookbook helpers, added some upload specs
[SPEC] Reorganized download, upload, and diff integration specs

 - Added one_of_each_resource_in_chef_server macro
 - Added one_of_each_resource_in_repository macro
 - Reorganized specs so that adding in versioned cookbooks specs will be easier
[SPEC] Added upload and download specs with cookbook versions

 - Specs assume that Chef requires name attribute in the metadata
[SPEC] Added name attribute to deps spec
[SPEC] Added versioned cookbooks spec for diff
[COOKBOOKS] Added symlinked proxy hack

 - Rather than backporting CHEF-3307, we add a hack here to make versioned cookbook work
 - When cookbooks_dir attempts to upload a versioned cookbook, it will:
   (1) Create a temporary directory
   (2) Symlink a canonical cookbook name to the versioned cookbook. ( /tmp/x -> /path/cookbooks/x-1.0.0 )
   (3) Upload the proxy
   (4) Remove the temporary directory

This makes the versioned cookbook compatible with Chef 11-stable and 10-stable.
[ARCH] Use JSON.parse directly until JSON gem code gets sorted out
[CORE] Bypass chef_object inflation and normalize raw requests instead

  - Factored out api_request() from knife_essentials to a class method
    available everywhere
  - Added #raw_request to handle GET requests without chef object inflation
  - Added RestListEntry#chef_hash to pull a raw_request()
  - RestListEntry#read will now normalize from #chef_hash
  - Added RestListDir#chef_collection to make it easier to customize and test
  - Updated unit tests to mock #chef_hash and #chef_collection instead of using a
    @rest mock, where appropriate
[CLEANUP] Fixed up code to make it more readable

 - Broke apart ChefFS::FileSystem::CookbooksDir#children
 - Broke apart ChefFS::FileSystem::CookbooksDir#upload_cookbook_from
 - Changed CookbookDir @versions_map to @existance and updated #exists?
 - Cleaned up comments
[SPEC] Refactored diff, upload, and download spec to have explicit inputs
[COOK] Fixed CookbookDir#exists? and @existence typo
Add the "versioned_cookbooks" parameter to allow upload and download of multiple cookbook versions.

Merge branch 'OC-5776/versioned_cookbooks'