test: Pathological extreme lock contention
Don't get tripped up by locks named 'hasOwnProperty'
unlock: Close before unlinking

the unlink() triggers watches to try to acquire a lock,
but the fd might not be closed yet, leading to a race condition where
the new lock gets fs.close'd instead of the old one.
Style: prefer early return to giant if/else
fixup
Fix wait calculation

Retrying only once is incorrect if we're set to wait for a given number
of ms, since there might be any arbitrary number of contenders.

Also, it was doing 'now - start' as the new wait time, which is incorrect.
Instead, calculate the proper end time, and continue retrying until that
time is reached, updating the wait time to be 'end - now' at each iteration.
v0.2.2
Use statSync() and unlockSync() in lock() stale situation to avoid race condition