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 
Another potential approach would be to make the methods in this class an informal interface, and then make `OpenAssessment.EditStudentTrainingView` the concrete implementation.  That way the training view would directly receive notifications about changes to the rubric, which it would be equipped to handle (since it's responsible for maintaining structure of the student training elements in the DOM).