Fix and enhance the determine_output_formats() method for tools.  Tool configs that define multiple <when> tags will now return the correct format since the check stops as soon as the format is found, and the method will now check attributes of the HDA's metadata as well as its immediate attributes.
Merge with 3b3eab0aefdf56eca923bb378715573e2cff83df
Change the file_ext attribute of datatypes.images.Jpg() to be 'jpg' instead of 'jpeg' so that dataset.datatype.file_ext == dataset.extension and dataset.datatype.file_ext will be found in datatypes.registry.Registry().datatypes_by_extension.
Unit tests for pull request #568.
Merge.
Fixes for /dataset_collections API endpoint.

Guess this is not as utilized as the variant under /histories.
Refactor output_collect for reuse.
Add helper for waiting on a job instead of a history.
Rename variable for clarity after tools can explicitly create collections.

created_collections is ambigious - these are HDCA for implicitly created collections so renaming this field implicit_collections.
Another variable rename for clarify.
Script to build workflows from simpler YAML description.
Enable explicit tool creation of collections with static or determiniable number of datasets.

By "static" I mean tools such as a FASTQ de-interlacer that would produce a "paired" collection with two datasets everytime. By "determinable" I mean tools that perform N->N operations within the same job - such as a tool that needs to normalize a bunch of datasets all at once and not in separate jobs. (For N->N collection operations that should or can be done in N separate jobs tool authors should just write tools that operate over a dataset and produce a dataset and let the end-user 'map over' that operation.)

There are still large classes of operations where the structure of the output collection cannot be pre-determined - such as splitting files (e.g. bam files by read group) - that are not implemented in this commit.

Model:

The models have been updated to do a more thorough job of tracking collection outputs. Jobs just producing HistoryDatasetCollectionAssociations works fine for simple jobs producing collections - but you don't want to map a list over a tool that produces a pair and produce a bunch of pairs HDCAs and a list:pair HDCA- you just want a bunch of pieces and the one list:pair at that the top.

Workflow:

Workflows containing such operations can be executed - but the workflow editor has not been updated to handle this complexity (and it will require a significant overhaul) so such tools are not available in the workflow editor.

Tool Testing (WIP):

TODO:

Tests:

Includes two tools to test this - one that uses explicit pair output names and one that iterates over the structure of input list to produce an output list.

Includes several new tools API tests that test the tools described above via the API and implicit mapping over such tools. Includes two new workflow API tests - one that verifies a simple workflow with output collections works and one that verifies mapping over workflow steps in collections works.
Prevent tools producing collections from showing in workflow editor.

Certainly feasible someday but workflow editor logic will require significant overhaul.
Allow tools to dynamically discovered output collections.

Models:

Track whether dataset collections have been populated yet.

Dataset collections are still effectively immutable once populated - but dynamic output collections require them to be sort of likely `final` fields in Java (analogy courtesy of JJ) - allowing them to be declared before they are initialized or populated. This is tracked by the `populated` field.

Tools:

Output collections can now describe `discover_datasets` elements just like datasets - except in this case instead of dynamically populating new datasets in the history - they will comprise the collection. `designation` has been reused to serve as the element_identifier for the collection element corresponding to the dataset.

See Pull Request 356 for more information on the discover_datasets tag https://bitbucket.org/galaxy/galaxy-central/pull-request/356/enhancements-for-runtime-discovered.

Workflows:

TODO: Workflow evaluation should stop once an input is a collection instance with any sub-collection having a `populated` field set to False. This has not been done yet.
Refactor dataset collection creation to allow creating elements after initial construction.

Enables output collections of dynamically discovered datasets.
Refactor small helper out of get_work_dir_outputs.

Leave passive aggressive comment about not understanding the complexity.
Small fix for output collection testing.
WIP: getting from_work_dir to work with output collections.
Fix from_work_dir for tool output definitions.