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.
Display a cookbook's owner as its maintainer

A cookbook's metadata.rb allows cookbook authors to specify maintainer
name and email address. The community site API does not use those values
as the cookbook's maintainer attribute, and instead shows the username
of the owner of the cookbook.
Merge pull request #343 from opscode/owner-is-maintainer

Display a cookbook's owner as its maintainer
Paperclip uses backwards-compatible URLs

While the true test is a production application which does not generate
backwards-incompatible URLs, we configure Paperclip so that it generates
nearly-identically formed URLs outside of production.
Add spec to ensure collaborator uploads don't change owner

This adds a spec that ensures when a cookbook collaborator uploads a new
version of a cookbook that the original owner of that cookbook doesn't
change.
Merge pull request #348 from opscode/backwards-compatible-paperclip

Paperclip uses backwards-compatible URLs
Merge pull request #333 from opscode/api-ownership

Authorize cookbook uploads and associate owners
Cookbook maintainers can add and remove collaborators from the show view