Simplified rename operation

Since upgrading read locks becomes problematic during renames, we
instead take a write lock on the longest common prefix between the
source and destination paths and then perform the rename.