Use move semantics instead of renames across the board
Created by: gtristan
This branch simply changes all the call to os.rename() for shutil.move(), which will use os.rename() internally in the case that the destination happens to be on the same file system.
Not all changes in the branch are required, however it's better when reading the code if all moves are made with one API, this way we reduce the risk of os.rename() creeping back in places where it can be incorrect.