Allow `knife cookbook site share` to omit category

Re-created against master from https://github.com/opscode/chef/pull/2198.

This adds a feature for knife to lookup the category on an existing cookbook. This enables uploading new versions of existing cookbooks with much less pain.

Fixes https://github.com/opscode/supermarket/issues/826 as well.
If we don't handle it here, the caller will be unable to distinguish between a failure to reach the API vs. a cookbook that wasn't found, though. How would you suggest I provide that distinction caller? Or would you rather the error message just say, "Unable to reach supermarket or cookbook not found"?