Validation and Dynamic Updates of Training Examples

This covers a lot of the dynamic interaction between Rubric changes and Training Examples. I still need to write JavaScript Tests, but this is a lot of code so I wanted to get this up sooner than later. This will cover a number of scenarios.

* Removing a criterion
* Removing an option
* Removing the last option in a criterion
* Adding a criterion
* Adding an option
* Adding the first option in a criterion
* Updating a criterion label
* Updating an option's points or label

This also includes generating criterion and option "names" client-side. This means the validation server-side will always assume that criteria and options have names, and will not try to generate them. 

@wedaly @gradyward 
I'm a little concerned about how much this class has to know about the student training view.  I'd prefer if there were methods in `OpenAssessment.EditStudentTrainingView` that performed this update, which this class could call.  I think that would better encapsulate the internals of the student training view.