Lock locks the given file, creating the file if necessary. If the
file already exists, it must have zero size or an error is returned.
The lock is an exclusive lock (a write lock), but locked files
should neither be read from nor written to. Such files should have
zero size and only exist to co-ordinate ownership across processes.
A nil Closer is returned if an error occurred. Otherwise, close that
Closer to release the lock.
On Linux, FreeBSD and OSX, a lock has the same semantics as fcntl(2)'s
advisory locks. In particular, closing any other file descriptor for the
same file will release the lock prematurely.
Attempting to lock a file that is already locked by the current process
has undefined behavior.
On other operating systems, lock will fallback to using the presence and
content of a file named name + '.lock' to implement locking behavior.