Given an output root and an initial relative path,
return the output file according to the HANDLE_EXISTING strategy
In the most basic use case, given a root directory "input",
a file's relative path "dir1/dir2/fileA.docx", and an output directory
"output", the output file would be "output/dir1/dir2/fileA.docx."
If HANDLE_EXISTING is set to OVERWRITE, this will not check to see if the output already exists,
and the returned file could overwrite an existing file!!!
If HANDLE_EXISTING is set to RENAME, this will try to increment a counter at the end of
the file name (fileA(2).docx) until there is a file name that doesn't exist.
This will return null if handleExisting == HANDLE_EXISTING.SKIP and
the candidate file already exists.
This will throw an IOException if HANDLE_EXISTING is set to
RENAME, and a candidate cannot output file cannot be found
after trying to increment the file count (e.g. fileA(2).docx) 10000 times
and then after trying 20,000 UUIDs.