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.