Add /universe endpoint

:fork_and_knife: 

This is a first stab at the `/universe` API endpoint.

The JSON output does not include the following keys from the Berkshelf API output: `location_path`, `location_type`, `endpoint_priority`.  I wasn't sure what these keys would correspond to inside Supermarket, or if we even need them now.  The rest of the JSON should match, format-wise.

I included some basic caching around the query itself, and the view.  Adding or deleting a cookbook will invalidate the query cache, and refreshing the query cache will invalidate the view cache.

I'm definitely interested in feedback here before saying this is ready to go.

/cc @bcobb @tristanoneil @brettchalupa 
An alternative body, which to me reads more directly, could be:

```ruby
cookbooks.reduce({}) do |result, row|
  name = row['cookbook']
  version = row['version']
  dependency = row['dependency']
  dependency_constraint = row['dependency_constraint']

  result[name] ||= {}
  result[name][version] ||= {
    'location_type' => 'supermarket',
    'location_path' => download_path(name, version, host, protocol),
    'dependencies' => {}
  }

  if dependency && dependency_constraint
    result[name][version]['dependencies'][dependency] = dependency_constraint
  end

  result
end
```