Rubric structure hash

This PR adds a `structure_hash` to the `Rubric` model, which includes:
* Criterion names / order numbers
* Option names / order numbers / points

This will allow us to find and compare rubrics while ignoring changes to the text of the prompt and explanations.

I've also added a data migration to calculate the has for existing rubrics, because someday we may want to use the `structure_hash` for things besides AI grading.  If so, it's safer to just run the migration now rather than remembering to handle the default value in the future.

I haven't made any changes to the AI code yet, because I'm waiting on @gradyward 's refactoring to land.

@stephensanchez Please review.