Fixes #11966, clearer interface for files.copy

* adds recurse flag (required when copying directories)
* adds (merge|remove)_existing, to choose whether to keep existing files, or delete the target directory entirely.