Everything looks good to me.
I have just a few questions:
Why do we have a dont_run flag in train_from_params and test_from_params now? Maybe we can split the function instead?
For the thread locking in data.py, why do we need two nested locks? I thought the use of "threadsafe_iter" already makes the iterator thread-safe. Are you sure there won't be a lockout problem? A short documentation on that (Coordinator, Item, threadsafe_iter) would be nice.
@qbilius @damro it would be great to have code review on this. it's a fairly extensive change to the data API.