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 
This looks very similar to the logic on line 66.  Maybe create a helper method that handles both cases?