Implement multiprocessing support for CachedDataSource
This merge request implements support for pickling of DataLoader instances and CachedDataSources.
This allows DataLoaders to be used in multiprocessing scenarios when the DataLoader instance is transferred using a queue.
Fixes #32 (closed)