Modifications to os::copy_file()

* Returns `false` if destination exists.
* Returns `false` if source is not a file (e.g. dir, sym link, etc.).

cc #9947