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
Merge branch 'policyfile-fixes'
log resource should support why-runt
Revert "log resource should support why-runt"

This reverts commit 2e60d36fd24bdae88aecedd7f85a11be82e9ecb2.