made deletes cascade where appropriate, also fixed badge locking for deletes

I didn't think this through, before, but we should really only be acquiring the badge lock once if we're only going to release it once.

I'm actually a little concerned that we'll run into problems if we throw exceptions on a save, which shouldn't happen in the first place, but we'd want to recover from it if it did.

I'll do a little more testing on this at some point.