Classy

* Add classy AI algorithm
* Improve the AI benchmark script
* Provide a Django cache to AI algorithms and use it to cache deserialized classifier data.
* Add AI grading requirements, including EASE
* Use wheels to install AI grading requirements
* Silence warnings
* Use in-memory cache without pickling
* Add version info to serialized classifiers (both EASE and classy)
* Default AI settings and better error messages

Most of the changes in this PR are for running tests that rely on scikit/nltk/scipy/numpy in Travis within a reasonable amount of time.

I'm relying on a newer version of scikit learn than EASE does, both because it's cleaner (`FeatureUnion` was added in version 0.13) and slightly faster.

Still to do:
* Additional validation rules for when training examples don't contain at least one positive/negative example.
* Validate Classy using additional test essays.

@stephensanchez I believe this is ready for an initial round of review, but I'm not planning on merging this until I validate the algorithm with more test data.
`predict()` takes a vector with `n` rows, where each row represents an essay, and returns a vector of `n` rows, where each row represents a score.  Since we're just classifying one essay, `n=1`, so we return the first/only score.