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 is declared outside the `OpenAssessment` namespace, so there's a higher risk of name collision.

I'm guessing you're declaring this as a `var` to make it private?  A more conventional way to do that is to:
1) Move `var generateOptionString` into the constructor.
2) Move all of the `prototype` methods into the constructor, assigning them to `this`:
```
OpenAssessment.RubricValidationEventHandler = function () {
// ...
     this.optionsUpdated = function(criterionName, name, label, points) {
// ...
```