Introduce SnapshotDiff model

This commit introduces a new model, `snapshot_diff`, and moves all
columns from the `snapshot` model to the new model. This is in
preparation of storing more information for each diff, and the snapshot
model had already started getting a bit too fat.

For now, I've kept all the fields in the snapshot model. An upcoming
commit will introduce a manual migration script that you can run to keep
the data. When I know that most contributors have run this migration,
I'll add a commit to remove the fields from the snapshot model.

I first wanted this model to be named simply `diff`. But I ran into a
lot of weird issues with name collisions (mostly with
`ActiveRecord::Diff` in specs) so I went with the more verbose
"snapshot_diff" instead.
Add manual migration for snapshot diffs

My previous commit (862b6a3) moved the diff-related fields from the
snapshot model to the new snapshot_diff model. This script will
transfer the data.

Run this from a terminal:

    bundle exec rails runner "ManualMigrations.move_diff_fields"

Should take about a minute if you have ~1000 snapshots.