Introduce atomic move and write of file
Introduce atomic move and write of file

The idea of this changes is simple: let move file to some temporary name
inside distance folder, and after the file is already copy it renames to
expected name.

When someone tries to save anything it also moves file to trigger OS
level notification for change FS.

This commit also enforce that `beets.util.move` shouldn't be used to
move directories as it described in comment.

Thus, this is fixed #3849

beetbox/beets,beetbox/beets,beetbox/beets,beetbox/beets