Add New Relic

This allows users to optionally configure a license key and app name for
New Relic for performance monitoring.
Move Cookbook maintainer, description to CookbookVersion

Since maintainer and description can be changed overtime with new
versions there is no need to store these attributes on Cookbook. This
moves both of these attributes from Cookbook to CookbookVersion but
delegates Cookbook#maintainer and Cookbook#description to
Cookbook#latest_cookbook_version for easy access.
Merge pull request #336 from opscode/new-relic

Add New Relic
Merge pull request #337 from opscode/move-cookbook-attrs-to-cookbook-version

Move Cookbook maintainer, description to CookbookVersion
Authorize cookbook uploads and associate owners

This ensures that the authenticated user is authorized to upload new
versions of a cookbook. If it's the first time the cookbook is being
uploaded the authenticated user is associated with the cookbook as the
owner.
Error messages must be an array.

Knife currently expects any returned error messages to be within an
array. So while most of these cases there is only one error message we
must return it within an array to maintain backwards compatability with
knife.
Use separate errors for cookbook create/destroy authorization

Knife expects any unauthorized destroy action to return a empty body and
a 403 response whereas cookbook create expects a body with an error code
and error messages and a 400 response. This accounts for the differences
between how each action should respond when authorization fails.