Validate CookbookVersion on Cookbook

:fork_and_knife: A Cookbook should not be allowed to exist if it doesn't have a CookbookVersion. This adds validation to satisfy this requirement. Some specs and logic are required to change to account for this new requirement as we cannot allow Cookbook to get into a persisted state without having a CookbookVersion. As Cookbook and CookbookVersion are now circular dependencies this requires a bit of odd dancing around the validations in some cases, there may be a better solution to this but this at least protects us from the giant hurt of invalid data.