Handle clients going away without relinquishing the lock

We had an issue where a process would get killed while still holding on to a lock. I've introduced the idea of a timeout where we can clean up locks from clients which haven't been heard from in a long time.

Let me know if you have any concerns.

Thanks,
Tim