Base class of dataset splitters.
Each splitter should be initialized with all its necessary parameters. The
final splitting is done running the splitter object on a certain Dataset
via __call__(). This method has to be implemented like a generator, i.e. it
has to return every possible split with a yield() call.
Each split has to be returned as a sequence of Datasets. The properties
of the splitted dataset may vary between implementations. It is possible
to declare a sequence element as 'None'.
Please note, that even if there is only one Dataset returned it has to be
an element in a sequence and not just the Dataset object!