decide if we're creating/unlinking up front
generate content up front
bypass idempotency in the cookbook_collection class

yo dawg, I put some idempotency in your idempotency because it heard you
really liked idempotency.

the file provider already handles this, the cookbook_collection does
not need to re-checksum the source to try to be idempotent, which is
what the last argument to the destination path does.  here we just want
to lookup a file in the cookbook cache and fetch it if necessary and
return the path into the cache.  the cookbook cache should not need
to know about where we're going to be deploying it.

as a side effect this avoids a second needless checksum.
CHEF-5081 functional test
add comment on magic behavior
some coderage cleanup

now i can sort of understand what manage_symlink_source actually does
and this reads correct to me.
validate checksums on downloads
small code rearrangement, avoid re-checksumming
different operating systems throw different errors
log resource should support whyrun

also, modernization of specs for log provider
Merge pull request #1725 from opscode/lcg/log-whyrun

log resource should support why-run
Merge pull request #1715 from opscode/lcg/file-provider-fixes

Lcg/file provider fixes
Convert Chef Zero helpers to instance methods

* Prefer instance methods to class methods for Chef Zero helpers.
  RSpec's design and feature set heavily favors using instance methods
  for test setup. This change will allow us to use let bindings and more
  naturally move common setup to shared contexts.
* Temporarily copy ChefZero's RSpec features in-repo. master of Chef
  Zero is currently broken for unit testing. Copy the changes here for
  now so we can make progress.
* Automatically generate a metadata file when using the "cookbook"
  helper function. This will be needed for a subsequent change that
  makes `name' required in metadata.
Fix expected format of JSON errors in integration tests

The format was previously not stable because chef-zero (or other test
code) would `require 'json'` and undo ffi-yajl's monkey patches to the
JSON gem. We would probably be better off if we can get out of the
business of monkeypatching JSON or attempting to provide compatibility
at all, in which case this commit could be reverted.
Merge branch 'integration-test-refactor'