Add API calls for checking workflow completeness
Skip grading/training tasks if the workflow is already complete.
Fallback to file-based cache for classifier data
Add info-level logging for cache hits/misses
Catch HTTP errors that occur when downloading classifier data
Bugfix: validate duplicate point values for rubrics with example-based assessments
Concatenate validation errors with semicolons instead of newlines so they show up correctly in Studio
Merge pull request #454 from edx/will/ai-skip-completed-workflows

Skip completed workflows
Merge pull request #458 from edx/will/TIM-660

Bugfix: validate duplicate point values for rubrics with example-based assessments
Merge pull request #457 from edx/will/TIM-661

Catch HTTP errors that occur when downloading classifier data
Merge pull request #459 from edx/will/TIM-659

Concatenate validation errors with semicolons instead of newlines so they show up correctly in Studio
Merge pull request #456 from edx/will/ai-cache-classifiers-to-disk

AI: Celery workers lose their cache after an exception causing many hits to S3
Changed NLTK requirements from 2.0.3 to 2.0.4
Update wheel archive for NLTK
Merge pull request #461 from edx/grady/NLTK-requirement-change

Changed NLTK requirements from 2.0.3 to 2.0.4
Refactor assessment base models to use RubricIndex for finding
criteria and options.

Consolidate logic for creating assessments and assessment parts
in the models (reduces duplicate code in the API modules)
Handle 0-option criteria (includes DB and schema migrations)
Remove duplicate test module from a bad merge
Update and centralize analytics events for peer/self
Update the data download script to handle 0-option criteria
Update student training to allow 0-option criteria
Update AI to support 0-option criteria
Add support for required feedback in XML and validation rules.
Required feedback controls whether the submit button is enabled.
Self / student training hide criteria with no options
Grade view always displays feedback for criteria with no options (no "additional feedback" visibility toggle)