Only return explicit places in API

The lookup for inherited places is expensive and we're not really using
that anywhere except for updating the Solr index, and in that case,
Story.inherited_places is called directly.
Don't retrieve default featured asset, set it

When a story doesn't have a featured asset explicitly defined, we've
been using the first image asset.  Previously, the code did this each
time the featured asset was requested.  It's kind of expenseive in terms
of database use, so it seemed better to do it once when the story is
published instead of each time the story data is fetched.  I added a
pre_save signal handler to auto-assign a featured asset if none is
explicitly specified.

The pre_save signal should be triggered for all existing stories, just
to make sure a featured asset is set (since it will no longer have a
default retrieved on access).  This can be done by just saving each
published story:

    from storybase_story.models import Story
    for s in Story.objects.filter(status='published'):
        s.save()

Partial fix for #455
Merge branch 'weekly-0.1.5' into 455-explore_page_performance
Merge branch 'weekly-0.1.5' into 455-explore_page_performance
Use values() to select fields to retrieve.

Not selecting the boundary from the database (we don't use it anyway)
really speeds up the query.
One query for featured assets instead of two.

Since we ultimately want to display the asset and expect it to exist, we
should just try to pull everything instead of checking that it exists
first.
Utility function for generating a cache key

This function generates a cache key for a model instance. It is based on
the pattern described at

http://eflorenzano.com/blog/2008/11/28/drop-dead-simple-django-caching/

but takes an extra argument to specify additional parts to the key since
(for now at least), I'm not caching the whole model, just certain
model-based properties.
Cache the featured image url.

This was one of the more expensive queries, so it makes sense to cache
it.
Cache points

This is another expensive operation, so cache it!
Don't select boundaries to get facet places

The query is a lot more expensive when you select the boundaries and all
we really need is the name and place_id
Remove debugging messages.
Cache story topics, places, projects and orgs
Add indexes for public IDs

I should have done this a long time ago, but I thought that UUIDField
fields automatically had indexes.
Refactor dehydrated versions of M2M fields

This commit moves much of the heavy lifting to the Story model, mainly
to keep all the knowledge of the caching strategy in one place. It's
also way more DRY.  Finally, I started storing the language code as part
of the cache key because the values will differ depending on the
language.
Checkpoint commit
Tests for cache invalidation.

Unit tests that test that the cached versions of a Story's ManyToMany fields
are removed when the field changes.
Support invalidating non-language-based cache keys

``Story.locations`` is a ManyToMany relation to the ``Location`` model,
which isn't translated.  So, it doesn't make sense to have separate
cache entries for each language.  I had to modify the cache-key
generation method, ``Story.related_key``, and the cache invalidation helper,
``invalidate_related_cache`` to support this case.
Merge branch '455-explore_page_performance' into develop