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.
Dataset collections - "map" with existing tools (UI).

Add UI components needed for previous commit.
Dataset collections - implicit "map" creates collections.

When running normal tools with normal data inputs across dataset collections in parallel - a collection will be created for each output with a "structure" matching that of the input (for instance pairs will create pairs, lists will create lists with the same identifiers, etc...). A previous changeset added the ability to run the tool in parallel - this changeset extends that functionality to create analogous collections from these parallel runs.

For example, if one filters a pair of FASTQ files a pair is created out of the result. Likewise, if one filters a list of FASTQ files - a list collection with same cardinality is built from the results.

There is a lot left TODO here - for one a lot of this logic should be moved into the dataset_collection module. The matching needs to be exact right now - not a problem for pairs (every 'element' has name 'left' or 'right') but for lists with element names - these have to match exactly - but a 'list' like samp1_l, samp2_l, samp3_l should be able to match against samp1_r, samp2_r, samp3_r and create a new list samp1, samp2, and samp3. Even if there is no matching prefixes a new 'unlabeled' list should be able to be created.
Dataset collections - "reduce" with existing tools.

Allow users to select dataset collections in place of individual datasets for data tool parameters with multiple="true" enabled (if all elements of collection would be valid as input to this parameter).

Restrict collection reductions to flat collections. If a user wanted to reduce a nested collection they probably want to map of the subcollections reducing each and building a collection of the reductions. TODO: The sentence is probably unintelligiable, need to provide a concrete example.
Dataset collections - allow mapping collection params over subcollections.
Refactor workflow module to allow multiple kinds of inputs.
Dataset collections - workflows - allow data_collection params.

Extend workflow running, extraction, viewing to allow tools with data_collection parameters.

This is brutally ugly because "isinstance( input, DataToolParameter )" which was already not very Pythonic has been updated to be "isinstance( input, DataToolParameter ) or isinstance( input, DataCollectionToolParameter )". This should all be reworked with an "is_data_parameter" on base ToolParameter.
Dataset collections - workflows - allow implicit mapping steps.

While running a workflow, if a data tool parameter is encountered with a dataset collection as input - run N jobs and create a dataset collection for each of the outputs (similar functionality added for tools in previous changeset). These collections are then used in subsequent steps while connecting steps so the parallelization continues as does the creation of dataset collections.

Much and more remains to be done and tested - chief among these concerns I think is that in order to test this I needed to hand modify a workflow json file. The ability to use this feature should be encorporated into the editor and the interface/controller for extracting a workflow from a history.
Dataset collections - workflows - implicit "reduce" steps.
HACK: Modify contents type on index, need to remove at some point.

Need to find a way to make backbone do this.
Dataset collections - create lists and pairs via HDA multi-select.
Dataset collections - backbone model for history content.
More reworking of backbone views to allow multiple content types.
Dataset collections - backbone view for history content.
Dataset collections - workflows - handle data_collection params in editor.
Dataset collections - workflows - handle implicit map/reduce in editor.

Track which inputs are multi-run on each tool - if any are - update all outputs to likewise by multi-run and propage. Fixup can_accept logic for matching data collection inputs and multi-run outputs to inputs. Allow implicit dataset collection reduction steps when connecting a multi-run output or dataset collection input step to a multiple input data parameter.
Dataset collections - workflow editor UI display different connector for implicit map steps.
Dataset collections - abstraction for collection types.

Perhaps over-engineering but want to centralize logic for reasoning about what kinds of collections are subcollections of other types, etc....
Dataset collections - hide HDAs behind implicitly mapped HDCAs.