add shell_out mixins to recipe DSL
Merge pull request #1702 from opscode/lcg/add-shellout-to-dsl

add shell_out mixins to recipe DSL
add shell_out to base provider code
fixing all the extra blank lines

yes, i just used rubocop on the chef sourcecode...
fixing trailing blank lines as well
Merge pull request #1707 from opscode/lcg/shellout-to-base-provider2

Lcg/shellout to base provider2
Allow requests to opt-out from JSON encoding the body

* JSONInput middleware now checks the incoming headers for a
  Content-Type; if set to a non-json type, the body is passed through
  unchanged. This allows us to use our normal HTTP client objects to
  make requests with non-JSON bodies, such as file uploads.
* Add test coverage for the JSONInput middleware.
Move `ohai` helper into platform_helpers, fix perf issue.

The ohai method is more relevant to platform detection in tests, so it
is moved into platform_helpers. It is also modified to use the
`OHAI_SYSTEM` constant we set in spec_helper. The prior implementation
did not correctly memoize the method, which resulted in several hundred
invocations of the ohai platform plugin during test loading, which took
~70s on my machine (before any tests ran).
Make FileVendor configuration specific to the two implementations

FileVendor previously was configured by storing a closure/anonymous
function as a class instance variable. This had the following downsides:
* The API was too general, which caused a lot of code repetition
* The block was lazily evaluated, which hid errors and made testing more
  difficult
* The closures captured references to classes with references to large
  data structures, which complicates GC.

Since we've only ever had the same two implementations of FileVendor, we
can encapsulate configuration of the FileVendor factory by wrapping each
configuration option in a method. As a side benefit, arguments to these
methods will be eagerly evaluated, which makes it easier to detect
errors.
Update CookbookUploader contract with HTTP client object

* Use the same HTTP client object for cookbook file upload as for object
  upload. Now that JSONInput disables json-encoding of request body
  based on content type header, there is no need to work around that
  limitation by using a different HTTP client class/object.
* Use method names that don't have `_rest`. These are not supported by
  custom Chef::HTTP subclasses (also they are ugly and redundant).
* Add high-ish level unit tests. The code must be refactored in order to
  write better unit tests, but tests for a variety of "happy paths" are
  needed before that can occur.
Add missing require for chef/digester in cookbook_version
Remove unused argument to CookbookUploader#initialize
Update changelog and release notes for policyfile fixes