Started refactoring data.py into a subpackage.

- Have very preliminary version of FeatureSet class.
- DictIters were moved into data.readers
- write_feature_file functions were moved into data.writers

Probably need to come up with a better name than DictIter for readers.
Add skeleton of filter and subtraction FeatureSet methods
Clean up imports in featureset.py
Add initial version of FeatureSet class
Refactor data module into featureset, readers, and writers modules.

The main idea here was that I wanted to make it easier for us to write
utilities that manipulate feature sets.  I've updated skll_convert to
use the new Readers and Writers, but I should also be able to replace
join_megam and filter_megam with more generic join_feature_set and
filter_feature_set tools.

This is not entirely done yet, because I still need to refactor
the experiments module to use all of this stuff.
Merge branch 'develop' into feature/create_featureset_class
Fix a lot of remaining issues with FeatureSet.
Finish refactoring readers module.

It wasn't actually done before. It's also quite a bit simpler now. We
only use one subprocess for reading in files. I don't think this should
really impact speed much though, because only the DictVectorizer
building is very slow.
Fix issue where fieldnames wasn't being returned by _get_fieldnames
fix issue where dictvectorizer wasn't being updated properly in FeatureSet.__add__
Update Travis settings to run nose in verbose mode.
Create separate TSVWriter and CSVWriter subclasses.
Disable broken feature scaling unit tests.

The tests never actually worked properly, but with the additional checks
in place for creating/writing FeatureSets I noticed that the test data
being created had mismatched numbers of IDs and features. Before the
refactor, that would make the file just end up with whichever number was
smaller (since it uses zip internally). Essentially, the IDs and labels
from the training set were being reused with the new randomly generated
features from the test set.  Fixing this issue made it so that
performance was the same with and without scaling turned on, which made
the test fail.

I also removed docstrings from tests that use yield, because the
docstring overrides the name of the test given by nose. Before it was
impossible to tell which run of a generator test was causing a problem,
whereas now `nosetests -v` prints out the arguments to make debugging
simpler.
Fix remaining issues with writing and merging FeatureSets.

- NDJWriter no longer has a type error.
- write_feature_file more reliably extracts file extension
- FeatureSet.filtered_iter doesn't screw up feature names anymore.
Merge branch 'develop' into feature/create_featureset_class

Conflicts:
	tests/test_skll.py
Add feat_vectorizer property to FeatureSet for backward compatibility
Made file reading *much* more memory efficient.

It's roughly 2x slower, because we iterate through each file twice
(once for IDs & labels, and once for features), but I can now load a
3.3GB NDJ file with ~7,000,000 lines and ~18,000,000 features on my
MBP without causing my whole system to lock up from "memory pressure".

The key to the approach is the new UnsortedDictVectorizer class I wrote
that can actually be used with generators (unlike the regular
DictVectorizer).  I've open a PR, scikit-learn/scikit-learn#3683, to see
if I get this added to scikit-learn, but until then it also lives in
SKLL.
Fix annoying Python 2 compatibility issue with UnsortedDictVectorizer
Update check_convert_featureset to properly compare features
Remove extra blank line in writers.py