Easy train / val splits
Currently the only way to define a train/val split is at the time a dataset is initialized. It would be better if we could support things like k-fold cross validation or particular named validation sets.
Crucially, random splitting into train/val sets should be reproducible, such that if one person defines a train/val split, another person can test their model on the same exact split. Maybe the easiest way to do this would be to get the row IDs used by each split and save them to file.