Unit tests for various data tool parameter handling.

Test optional datasets can be used in tool evaluation (in test_evaluation.py).

Add test_data_parameters.py which test many random DataToolParameter behaviors. Test various paths to DataToolParameter.to_python - including recently enhanced ability to use optional dataset with 'multiple=True' data parameters. Test filtering on datatypes, implicit conversion options (both existing conversions and new ones) both when building HTML forms and picking intial values for workflows. Test special handling of hidden datasets. Tests picking intial datasets when optional and without repeats when used in subsequent calls.
Rearrange unit tests.

Move tests that were in tests/unit but could logically be placed into tests/unit/tools or tests/unit/jobs into these directory.
Introduce DatasetMatcher to simplify DatasetToolParameter...

This reduces code duplication related dataset_collectors now and abstracts out important functionality I reuse further to collect dataset collections downstream.

Was originally added in 28d43f4 as DatasetParamContext and backed out of right away. I have reworked it so that it no longer breaks implicit conversion, the relevant classes and methods have less generic names, and it has a healthy set of test cases.

In addition to basic tests on matching datasets to parameters, selections, and implicit conversions - these tests include testing of dataset security inconjuction with data_destination tools as well as filtering data parameters on other data parameters.