Deadlock retries

Retry transaction on deadlock error.
I'm curious - once the dust settles above, will `prompt` always be available from `appearance.prompt`? In the case where `last_appearance` is not `nil`, then it will be. What I'm not sure is if `appearance = self.site.record_appearance(visitor, prompt)` will also cause the `prompt` to be available as a getter from the newly-recorded `appearance`.

If so, then I wonder if it would make sense to always just return `appearance` (instead of the `prompt, appearance` tuple) and let the consuming code pull out the `prompt` when it needs it. That way, `create_or_find_next_appearance` returns a single thing and could perhaps be slightly more reusable in other areas that might not necessarily want a prompt.

OTOH, maybe that's overthinking things unnecessarily.