Start to build out cookbooks#create endpoint.
Finish building out original cookbooks#create endpoint.
Add cookbook categories, move share functionality into Cookbook

This adds a Category model so cookbooks can be created and associated
with a particular category, a requirement of the share endpoint.

This also starts to abstract the functionality for sharing a cookbook
out into Cookbook working towards abstracting Cookbook attributes from
the metadata.json in the tarball posted.
Add spec for Cookbook.share!
Initial metadata extraction

This builds out a very simple implementation for extracting metadata
from a metadata.json file inside of a .tgz file.

This also tweaks how pg_search works for Cookbook to adjust for
having category as an association.
Attach tarballs to cookbook versions

This attaches tarballs to cookbook versions when someone
shares a cookbook.
Start to handle uploading a new version.

This starts to handle uploading a new version of a cookbook
by finding the original cookbook by name and updating any attributes
from the metadata.json.
Tell git to ignore redis dumps and paperclip attachments.
Start to add error handling for creating cookbooks.

This adds error handling at the controller level for dealing with
invalid or missing user supplied data.
Move more specific specs into controller spec.
[inp] teasing apart cookbook upload concerns
Eliminate maybe_* variables
Fill out pending metadata parsing error specs
Fill out pending metadata value specs
Clarify purpose of redis-test-vN tarballs
Document the metadata attributes

Virtus and Yardoc don't play too well together, and Virtus might not be
a known dependency for all contributors, so we wanted to make sure it
was clear why we were using Virtus and how to use it.
Move validation error handling to CookbookUpload
Test that sharing an existing cookbook saves a new version
Return a 201 after a successful sharing attempt
Do not verify authenticity tokens in the API