Safe will take a destination path and return a validated path that is safe to use.
without overwriting any existing files. If a conflict exists, it will append a number
to the end of the file name. If the parent directory does not exist this function will
return the original path.