Feedback-only criteria

Feedback-only criteria: [TIM-468](https://edx-wiki.atlassian.net/browse/TIM-468)

* Per-criterion feedback can now be required (in addition to disabled/optional)
* Criteria can be configured to have no options, only written feedback.
* Refactor of rubric model queries.

Unfortunately, this includes database schema and data migrations:
*  `AssessmentPart.option` is nullable
* `AssessmentPart.criterion` added; existing rubrics need a data migration to populate this field.

Some folks who should take a look at this:

* @mulby: This includes some changes to the emitted events for creating a self- or peer-assessment.
* @srpearce: There are a few new validation messages that will be visible to course authors.
* @ormsbee: I've done a pretty significant refactor of the assessment models to (a) move assessment creation logic into the models as class methods, and (b) introduce a `RubricIndex` helper class in place of `Rubric.options_ids`.  If you have a moment to look over this, I'd like to get your thoughts.

Still to do:
* Integration tests for grade complete.
* Jasmine tests for the enable/disable logic.
* Cross-browser testing in a sandbox.
* Perf testing.
It should be straightforward, no? You're already extracting model information into dicts for lookup in the __init__(). You'd just store it in a cache entry that had the content_hash as part of they key. You wouldn't want to store the object itself (with it's model pointer) because even if pickle supports it, default cache behavior switches to JSON in later versions of Django. But you could definitely store the stuff you extract from the models.

Anyhow, definitely measure it first, but it looks like low hanging fruit for caching if it turns out that it's causing a lot of queries across the various AJAX calls.