Refactor Tasks::Dataset to use abstract interfaces