Dataset collections - infrastructure glue...

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

Utilize dataset collections from tools.
Get rid of unused is_convertable nested function.
Introduce DatasetParamContext to simplify DatasetToolParameter...

This reduces code duplication related dataset_collectors now and abstracts out important functionality I would like to reuse in other ways downstream.
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 or 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.

Like with workflows, but with tools.
Rebase into multitools.
Rebase earlier.
Rebase earlier (multi-run).
Rebase into multitools commit.
Rebase into multitool commit.
Rebase into multi-tool commit.
Parallel tool execution across dataset collections (UI).
Add tool meta parameter exception.
Parallel tool execution across dataset collections (backend).
Add get_output_name to DefaultToolAction.

Slightly simplfies default execute but more importantly will allow reuse of logic when naming dataset collections.
Introduce execution tracker and helper for working through tool param combinations.
WIP: Build dataset collections from dataset collection runs.
Rebase into parallel collections.