pkg/lock: refactor DirLock to facilitate discrete opens

 This also restores atomic lock conversions

 * Discard DirLock interface
 * Convert private lock struct into public DirLock
 * Convert private newLock function to public NewLock
 * Introduce receiver-based analogs of all acquisition functions
 * Convert existing open+acquire functions to use the public receiver-based
   acquistion functions.
Perhaps you could clarify that the receiver functions are idempotent if this DirLock already holds it