[IO - NN] Load data per chunks
As shown by #178, we need chunk data loaders.
Note that currently there is a hard cap of 2GB per single heap alloc.

This can be implemented using closure iterators or in similar way to PyTorch DataLoader which is parallel but probably inefficient as it cannot fully occupies all cores compare to this [PyTorch + threading solution](https://www.sagivtech.com/2017/09/19/optimizing-pytorch-training-code/).