Users can share cookbooks via the API

A user may POST to /api/v1/cookbooks to share a cookbook artifact on the
community site. Depending on whether or not the cookbook's name is known
to the community site, this operation will either create a new cookbook,
or publish a new version of an existing cookbook. The endpoint does not
yet associate uploaded cookbooks with users, and as such does not deny
unauthorized updates.

Now that this endpoint works, we're able to show real tarball file size
and URL information via the API. For knife, this means that the "site
download" and "site install" subcommands work as expected.

Implementation Notes

- When sharing a cookbook with knife, knife adds a metadata.json file to
  the tarball which contains various bits of pertinent cookbook
  information, including the cookbook's name. So, in order to share a
  cookbook, we must extract the metadata.json file and process it.
  There's a lot that can go wrong while doing this, and most of that
  action happens in the `CookbookUpload` and
  `CookbookUpload::Parameters` classes.
- We use Paperclip to handle saving uploaded tarballs. Right now, the
  tarballs are saved to the filesystem. Eventually, they will be saved
  to S3 to coexist with all of the existing tarballs.
- We explicitly `require "cookbook_upload"` to mitigate some errors
  caused by autoloading. Without this require, Rails does not load the
  correct constructor, which ultimately causes a bunch of
  ArgumentErrors.