Cascade-delete sweeps on project deletion

To prevent dangling sweeps from causing issues, I'm adding a
cascade-delete on sweeps when a project is removed.
Cascade-delete viewports on project deletion

To prevent dangling viewports from causing issues, I'm adding a
cascade-delete on them when a project is removed.
Cascade-delete urls on project deletion

To prevent dangling urls from causing issues, I'm adding a
cascade-delete on them when a project is removed.
Cascade-delete snapshots on url deletion

To prevent dangling snapshots from causing issues, I'm adding a
cascade-delete on them when a url is removed.
Cascade-delete snapshot diffs on snapshot deletion

To prevent dangling snapshot diffs from causing issues, I'm adding a
cascade-delete on them when a snapshot is removed.
Cascade-delete diff clusters on snapshot diff deletion

To prevent dangling diff clusters from causing issues, I'm adding a
cascade-delete on them when a snapshot diff is removed.
Add cleanup script to remove orphans

I've just pushed a batch of commits that make sure that we
cascade-delete things. Up until that point however, we weren't doing a
good job of keeping orphans out of the database. In order to help people
get their database in mint condition, I'm adding a script to clean out
any orphans.

To run the script:

```bash
be rails runner 'DBCleanup.destroy_all_orphans!'
```

Actually, that's not the way. By default, the script will do a dry-run,
and simply log what would have been deleted. To actually delete things,
you need to pass in `dryrun: false`

```bash
be rails runner 'DBCleanup.destroy_all_orphans!(dryrun: false)'
```