Dataset Represents a potentially large list of independent elements (samples), and allows iteration and transformations to be performed across these elements. 
DatasetIterator Represents the state of an iteration through a Datset. 
DatasetOptional An optional represents the result of a dataset getNext operation that may fail, when the end of the dataset has been reached.