An interface designed to abstract classes that store machine learning data.
This interface is designed to provide EngineDataSet objects. These can be
used to train machine learning methods using both supervised and unsupervised
Some implementations of this interface are memory based. That is they store
the entire contents of the dataset in memory.
Other implementations of this interface are not memory based. These
implementations read in data as it is needed. This allows very large datasets
to be used. Typically the add methods are not supported on non-memory based