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.