Massively refactor data module

The main thing I've done here is take the old data module and split it up into a sub-package with three modules: [featureset](https://github.com/EducationalTestingService/skll/blob/feature/create_featureset_class/skll/data/featureset.py), [readers](https://github.com/EducationalTestingService/skll/blob/feature/create_featureset_class/skll/data/readers.py), and [writers](https://github.com/EducationalTestingService/skll/blob/feature/create_featureset_class/skll/data/writers.py).

The `featureset` module contains the `FeatureSet` class that was proposed in #81, which allows easy filtering and merging of datasets. I haven't created more general replacements for `filter_megam` and `join_megam`, but those should be simple to create with this new class.

The `writers` module contains an OO refactoring of the old file writing functions, and they all support printing out status, so you know how much of the file has been written.  All of the `Writer` objects take a `path` and a ` FeatureSet` as the arguments to their constructor, and then you just call `Writer.write()` to actually write out the file. It's very similar to who `CSVWriter` works.

Similarly, I went through and refactored the old private `DictIter` classes to be public `Reader` classes in the `readers` module that have a `.read()` method that returns a FeatureSet.

I've kept the old `write_feature_file` and `load_examples` functions, as to not break the public API, but there are warnings that they are now deprecated and will be removed in SKLL 1.0.0.
"somebody" being you in this case, right? :smile: 

Anyway, yeah, that's a good point. I kept getting tripped up by the fact that it always returns a 2D array too.