Add test case that shows off bug in shared-lock/exclusive-lock integration wherein an exclusive lock is granted before all lower locks are cleared.
refactor shared functionality from ExclusiveLocker and SharedLocker back into LockerBase, relying on NodeDeletionWatcher's new multi-delete and default threshold of zero-remaining to ensure that we don't give out a lock until all locks that block have been released (for shared locks, this is all write locks lower than our own; for exclusive locks this is all locks lower than our own)