REST API support for associating data with assets

Update ``DataSetResource`` to have an endpoint with a URI of
``/api/VERSION/datasets/asset/ASSET_ID/`` that, when posted to,
creates a new data set and associates it with that asset. When
a GET request is sent, it returns a list of datasets associated
with the asset.

Also, add an endpoint,
``/api/VERSION/datasets/asset/ASSET_ID/DATASET_ID/`` that when
sent a DELETE request, will disassociate the specified dataset from
the specified asset.

Add signal handlers that automatically adds a dataset to a story when
it is added to a story's asset.

Also adds the ability to associate an instance of the ``DataSets``
Backbone collection with an instance of an ``Asset`` model. Doing this
causes the URL of the collection to contain the asset's ``asset_id``
attribute.

Addresses #583
Remove "Add Data" step from workflow

Remove the "Add Data" step from the workflow in anticipation of implementing
datasets being associated with assets.

The code for ``DataView`` is left intact as a possible reference for views
implementing manipulation of asset datasets, but it should eventually be
removed.

Addresses #583, #760
First pass at asset dataset collections and views

Implement the Backbone views and updates to models and collections to
support the UI for creating and listing datasets with associations to
assets.

Implement ``DataSets.remove`` so that it takes an optional ``sync``
option that, if truthy, will cause the dataset model instance to be
removed from the collection at the server by sending a DELETE request
to /api/<version>/datasets/<asset-id>/<dataset-id>/.

Addresses #583
Set flag for already fetched datasets

Set the ``_collectionFetched`` flag to ``true`` for datasets that have
already had their ``datasets`` property initialized. This is most often
the case when an asset has been removed from a section container and
then re-added by dragging it from the asset drawer.

This change fixes a bug where the data set list was not being rendered
after an asset with datasets was dragged from the asset drawer after it
had been removed by changing the section layout.

Addresses #583
Add "save and add another" button to data set form

Add a separate "Save and add another" button to the form for adding
datasets.  Clicking the "Save and add another" button resets the
form, but keeps it visible. Clicking "Save" hides the form.

In order to implement this, I had to break rendering of the data set
list into a separate method.

I also had to add logic to reset the add data set form. It seemed like
the cleanest way to do this was to destroy the old form view and create
a new one and re-render. It would be nice of ``Backbone.Form`` instances
had a reset method.

Addresses #583
Switch to asset display state after adding data set

Switch back to the display state after a new data set is added
instead of returning to the data set list view.  This is achieved
by proxying the ``create:dataset`` event along with its
``postSaveAction`` from ``AssetDataSetAddView`` through
``AssetDataSetListView`` and on to ``SectionAssetEditView``, which
will switch to the ``display`` state if ``postSaveAction`` is
``close``.

Before switching to the display state, refresh the asset model from
the server in order to display the most recent version of the
rendered data set list (in the asset model's ``content`` attribute).

Addresses #583
Evaluate lazy translations in data set list

Use unicode strings when building the data set list in ``dataset_html``
so that the lazy translation objects will be evaluated.

We have to use lazy translations because a default argument of the
method is a translated string.

Addresses #583
Style asset data set lists

Add icons before the list items that indicate whether the data set
link goes to a downloadable file or an external link. Also indicate
this using a tooltip message. Set the width of the list items to
nicely wrap and display long titles.

Addresses #583
Mitigate flash of content after adding data set

A flash of content occured because ``AssetDataSetListView`` toggled
the display of the data set list and the add data set form before the
state of ``SectionAssetEditView`` was updated and the view re-rendered
while waiting for the asset model to sync with the server. This is
creating a ``sync`` state of ``AssetDataSetListView`` and setting this
state before calling ``fetch`` on the asset model.

Addresses #583
Remove DataView

Since there's no longer an "Add Data" workflow step, and listing,
adding and viewing data sets has been merged into the asset edit view,
we no longer need the DataView view.

Addresses #583
Support editing asset datasets in builder

``DataSetResource`` had to be updated to support the ``put_detail``
method. I also had to update the ``hydrate_file`` method to handle
updating an existing ``LocalDataSet`` instance (without updating
the file field)

Also, the ``DataSet`` Backbone model's ``schema`` method had to be
updated to handle selecting only one of the ``file`` and ``url``
fields in the case of an existing model.

I factored common functionality shared between
``AssetDataSetAddView`` and ``AssetDataSetEditView`` into a base
view called ``DataSetFormView``.

I changed the text of the reset button in ``AssetDataSetListView``
to be "Close" instead of "Cancel".

I also updated the propagation of events from
``AssetDataSetListView`` from to ``SectionAssetEditView``. Instead
of propagating the ``save:dataset`` and ``create:dataset`` events,
I keep track of when datasets have been added or changed and
trigger a ``close`` event on ``AssetDataSetListView``. This event
has a ``refresh`` argument that is truthy if the parent view
should fetch and re-render the content.

Addresses #583
Clean up asset data set table

Adjust the width of the columns, convert the action links to buttons
and consolodate the title and source listing.

Addresses #583
Replace asset control icons with text

Replace the asset control icons (Data Sources, Edit, Remove) with
text links. Also, make them always visible instead of only visible on
hover.

Addresses #583
Update asset display when removing dataset

Addresses #583
Include asset type in edit link

s/Edit/Edit {{asset_type}}/, e.g. "Data Sources Edit Table Remove"

Addresses #583
Move asset dataset list markup into a template

Refactored ``Asset.dataset_html`` so that the markup is in a template.
This is much cleaner and more extensible than concatenating a series of
strings.

I also updated the markup so that the data set title is no longer a link
and the download icon follows the title instead of preceding it.

Addresses #583
Make data set titles links

As per @bpawlak's suggestion:

> I actually liked having the dataset name be the link as well as the
> icon... far more salient and a bigger "hit" area for the mouse.

Addresses #583
Remove old data workflow step template

This template is no longer used after switching to asset-associated
data sets.

Addresses #583
Fix asset add/edit form scrolling

Previously, I hadn't taken into account the header when setting the
argument to scrollTop

Addresses #583
Automatically set links_to_file on save

Set ``DataSet.links_to_file`` automatically when saving an
``ExternalDataSet`` model.  ``mimetypes.guess_types`` is used to
guess whether or not the URL stored in ``ExternalDataSet.url``
represents a downloadable file.

This implementation prohibits the manual overriding of this
flag in the Django admin, which is problematic for downloadable URLs
that don't have some kind of filename in the path, but this seems
like an edge case that doesn't warrant additional complexity.

Addresses #583