Tools for re-training and comparing knowledge and accuracy models

Summary:
Major things I have done:
- Created a new Hive query to extract problem logs as training data
- Modified accuracy_model_util.py and accuracy_model_featureset.py to understand the new training data format
- Modified accuracy_model_featureset.py to initialize the random components from an existing set (so we can continue using the `KnowledgeState` objects that exist in production)
- Created a compare_accuracy_models.py that takes in several models, and test data, simulates all of the models on the test data, generates ROC curves per exercise, and then writes them all to a PDF file.

The compare_accuracy_models.py is very much a work in progress at this point, so please review it only for functional correctness / bugs, instead of style.  It's really ugly, I know.

My next steps are:
0. Create and organize some training/test data sets.
1. Train new models against these data sets.  I expect the new model to have many more thetas than the old model, and probably many more random components.
2. Compare the new model(s) and the old model with the compare_accuracy_models.py script
3. Potentially add new diagnostic output:
  - Average area under curve across all exercises to get a single number to compare "super-models"
  - Number of exercises which "win" in each of the super-models
  - Anything else?
4. Repeat steps 1 and 2 until a suitable new model has been trained.
5. Clean up all of this code, and send it out for more review
6. Write up my experience in a Google doc or something explaining how/why the new model was trained

One oddity that I am seeing right now is that it looks like the old `knowledge_params.pickle` model is performing better on `bcr.model.pkl`'s training data than `bcr.model.pkl` is itself. I've just been using the same dataset to quickly iterate on the comparison script.

The only reason I could come up with is that the old model has thetas for many more exercises (326 vs 90), so that it can make much better predictions for initial problem attempts much better than the new model.  I think I disproved this by commenting out the following line and re-generating the ROC curves.  If I understand correctly, this would eliminate both models' ability to influence predictions across exercises.

```
cur_ks.update(cur_ue, problem_type, problem_number, label)
```

Here is the output from compare_accuracy_models.py.  I will upload the PDFs of the graphs in a comment.

```
$ ./compare_accuracy_models.py --samples accmodel/problemlogs.csv --knowlege_param accmodel/bcr.model.pkl --knowlege_param /Users/mattfaus/dev/webapp/exercises/knowledge_params.pickle --num_samples 100000  --graph_pdf graphs.pdf
Random Components accmodel/bcr.model.pkl: 2023 keys (2023 / 100.00% shared)
Random Components /Users/mattfaus/dev/webapp/exercises/knowledge_params.pickle: 2023 keys (2023 / 100.00% shared)
Shared keys with the same value: 2023 (100.00%)
Thetas accmodel/bcr.model.pkl: 90 keys (84 / 93.33% shared)
Thetas /Users/mattfaus/dev/webapp/exercises/knowledge_params.pickle: 326 keys (84 / 25.77% shared)
Processed 10000 samples
<snip>
Processed 100000 samples
49371 of 100000 (49.37%) samples skipped due to ordering problems
```

Test Plan: Lots and lots of local experiments

Reviewers: jace, eliana

Reviewed By: jace

CC: jascha, tom, tony, benjaminhaley

Differential Revision: http://phabricator.khanacademy.org/D6152