Creates the low-level data reader classes

We have a class which organises the scheduling of sample reading, with
and event loop, a sample reader and a dispatcher.

This commit also implements a random sample reader and contains basic
tests