implement lock stealing.

This is kind of gross, but we have a rare situation where we end up
with a process holding a lock and then crashing.  If that happens,
the other processes all end up stuck waiting for a lock that never becomes free.

This isn't perfect. If we have multiple waiters, we can end up stealing
from a live process. I'll revisit this later, for now I just want to
fix the obvious deadlock.