Minor style and refactoring touch up to new workflow/run.py.

Reduces cyclomatic complexity and makes downstream diffs with dataset collection work less dramatic.
Handle dataset collections in workflows.

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.
Workflow implicit dataset collection creation and parallelization...

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.
WIP: Extracting implicit collections from histories.