Update notification types

Update the types of notifications that a user can receive. This requires
updating the user profile model to store the notification settings and
updating the microcopy for the notification settings form.

Addresses #811
Gracefully handle HTML parse errors

Gracefully handle HTML parse errors when trying to get the thumbnail
of an ``HtmlAsset``.

Closes #814
Story reminder emails

Send reminder emails when a story is published and when a story has
been unpublished for 5 days.

This implementation includes a new model,
``storybase_messaging.models.StoryNotification`` that saves the
notification type, story, and scheduled date/time for sending the message.
This class also encapsulates any type-specific logic for notifications
as well as the logic for generating the content of the email message from
templates.

Storing this information in a model allows for asynchronous sending of
messages, so we aren't blocked on e-mail sending when we save stories. In
the future sending of email, could be initiated by something like Celery.

The subject and body of the notification emails are stored in templates,
with separate templates for each notification type and language.  See
the docstring for the ``StoryNotification`` model for a description of the
template naming convention.

For now, the mechanism for sending emails is the
``send_story_notifications`` management command, to be kicked off by a
cron job.

Addresses #580
Close unclosed <td> tag

Close an unclosed <td> tag in the published story notification HTML
email template.

Addresses #580
Set image width using 'width' attribute

In the published story notification HTML email template, use the
``width`` attribute of the ``<img>`` tag instead of the ``max-width``
CSS property to be compatible with more email clients.  In particular,
certain versions of Outlook didn't handle constraining the widht with
``max-width``.

Addresses #580
Get rid of two-column layout in emails

In some mail clients, particularly the Android one, elements in the
two-column layout were falling outside, to the right of the display. To
avoid scrolling on mobile, move the content so everything is in vertical
succession rather than side-by-side.

Addresses #580
Add media queries to HTML email

This is to try to scale the content appropriately for mobile devices.

Addresses #580
Avoid circular dependency in management command

Move the import inside the method to avoid having issues with an
``ImportError`` being thrown when loading template tags. I only had this
problem on the dev server and not in my local development environment.

Addresses #580
Log errors that occur when sending emails

We don't want to stop the entire sending process when there's an error,
but we also don't want to fail silently.  Instead of using the
``send_messages`` method, handle opening and closing the connection
ourselves and log an error message if there's an error, but otherwise
squash the exception.

Addresses #580
Searchable help

Create a ``SearchIndex`` subclass for the ``Help`` model to include help
in the site search.

However, not all help should be indexed since some
of it only makes sense in context (e.g. inline help in the builder). Add a
``searchable`` flag field to the ``Help`` model to differentiate help that
should be included in the index.  In order to make this schema update,
the ``storybase_help`` app had to be initialized to be used with South.

Update the search results template to show the type of result (for now
either "Help" or "Story").

Add a detail view for help items so links in the search results go somewhere.

We want to recreate the existing help page, and allow the hand curation,
so the most straightforward way to do this is to create a custom Django
CMS Plugin that can be inserted in a CMS page region.

Addresses #507
Integration test for published story notification

Addresses #580
Conditionally show unpublished story list

Only show unpublished story list in unpublished story notification email
if there are other unpublished stories.

Addresses #580
Integration test for unpublished story notifications

Addresses #580
Honor published story notification preferences

Don't send a published story notification if these notifications
are disabled in the user's profile.

Addresses #580
Logging for send_story_notifications management command

Addresses #580
Add unsubscribe links to notification messages

Addresses #580
Merge branch '580-reminder_emails' into develop
Merge branch '507-searchable_help' into develop

Conflicts:
	docs/upgrading.rst
Don't try to create notifications for authorless stories

While this case shouldn't occur in actual system use, in tests, the
``create_story`` API function is often called without an author specified.

The signal handlers used to create ``StoryNotification`` model instances
when a story is saved were failing when trying to check the
notification settings in the profile for the nonexistant story author.

This commit adds a guard statement to check that the story has an
author before proceeding with creating a notification.

Addresses #580
Pass include_host when testing method

As part of implementing #580, the API for
``Story.featured_asset_thumbnail_url`` changed so that the hostname
is included in the returned URL by default.  This breaks the
``storybase_story.tests.StoryModelTest.test_get_featured_asset_thumbnail_url_empty``
test.  Passing ``include_host=False`` to the call to
``featured_asset_thumbnail_url`` matches the old behavior that the test
is expecting.