Cleaning up ReaderBuilder interface
Cleaning up ReaderBuilder interface

The way `splits()` is currently used is so convoluted. It's impossible to compose ReaderBuilder. I'm working on a composite reader so this is a prerequisite for it.

The idea is that the ReaderBuilder should maintain the states it needs to create a reader. Any setup is done through the new `setup()` method. Currently, `setup()` should only be called once, but, if needed, it should be safe to call it multiple times.

caffe2/caffe2,xzturn/caffe2,xzturn/caffe2,xzturn/caffe2,xzturn/caffe2,xzturn/caffe2