Record history content type with output of history contents API.

Downstream in dataset collections branch this isn't just dataset, including this will allow clients to distinguish between different kinds of content.
Refactor backbone models to allow different kinds of history contents.

In particular, add a new backbone parent model (HistoryContent) refactored out of HistoryDatasetAssociation. This makes room for a forth coming HistoryDatasetCollectionAssociation model that will be emitted from the history contents API.

There are likely better ways to share common functionality between a dataset and a dataset collection contents - more JS savy developers should feel free to refactor into smaller mixins for instance. For now HistoryContent is just composed of the overlap in functionality between dataset and collection representations downstream and is an quick and dirty way to share said functionality.
Refactor backbone views to allow different kinds of history contents.

This makes room for a forth coming HistoryDatasetCollectionAssociation model that will be emitted from the history contents API. Same comment as previous changeset applies - this is a potentially crude way to share duplicated functionality and a better design would be most welcome.
Rename historyPanel.refershHdas to refreshContents.
Add simple module verions of validation stuff in base controller.

For reuse outside of controllers (i.e. in dataset collections). Objections to refactoring base controller stuff to use this?
Extract base class from DataToolParameter to be shared with DataCollectionToolParameter.
Dataset collections - models - basics.

Mapping, model definition, database migration, and model unit tests to support database collections.
Dataset collections - models - add history.active_contents.

Get all active datasets and collections ordered together by hid. Used downstream for instance when extracting workflows from histories.
Dataset collections - models - history copying.

Copy history dataset collection associations when histories copied.
Dataset collections - infrastructure glue.

Add an API and service layer for dataset collections.
Dataset collections - tool parameters - basics.

Add parameter, wrapper, etc... to explicitly utilize dataset collections from tools. These require actually modifing or creating new tools to take in "data_collection" parameters. Downstream changesets will provide a number of infrastructure enhancements to allow existing tools to "map" and "reduce" dataset collections with existing tools.
Dataset collections - tool parameters - enhanced rerun.

Rerunning tools in same history will work without this, but getting rerun to work on imported histories requires this hack (mirroring the same hack for HDAs in the same file).
Rework logic related to computing selected datasets.

Allow dataset ids to be used. This will make implementing multi-running of tools possible without expanding values out to hdas. check_params will still be called on each permutation so this shouldn't result in security problems.
Refactor Tool.handle_input result to return list of pairs instead of odict.

This added generality of allowing multiple outputs with the same output name will allow handle_input to execute multiple jobs in subsequent changesets.
Allow running tools on multiple datasets simulatenously (backend+API).

Each data tool parameter can be specified via a similar named parameter but with the suffix |__multirun__. This second parameter variant should be a list of datasets - one job will be created for each such dataset.
Improvements to test_execution.py
Allow running tools on multiple datasets simulatenously (UI).

Update tool form. This commit needs work to ensure this only affects the tool_form.mako.
Rework dataset collection parameter to use switching field (like data parameter).

Will allow interesting map/reduce junk over nested collections downstream.
Add tool meta parameter exception.
Dataset collections - "map" with existing tools (backend).

Allow replacing data parameter inputs with collections - this will cause the tool to produce multiple jobs for the submission - one for each combination of input parameters.