Cleaner empty dirs

This slightly changes the way Cleaner handles directories containing no files but non-empty directories:

* if there's a new file to be created it doesn't only keep the parent directory but all the parent directories up to the destination directory
* if there's a directory in keep_files, it removes it before clean-up from the existing files as well as all its parent directories up to the destination directory