generalization of CSV dataset + shuffle feature

Rebased + added some features: https://github.com/lisa-lab/pylearn2/pull/1072
I think adding two options on top of `expect_labels` is too much: there should be a way to refactor that into fewer options, especially because most of combinations do not make sense.
Also, we should probably specify explicitly the number of class labels if we are doing classification.
The case of the 1D targets is not as clear as I thought, so we may not need to support it in the end.