@zaphod42 -- When I was in the office last week, and I had just confirmed that `exist?` also did not work properly in Windows against symlinks, @joshcooper and I talked about this and made a pragmatic judgement call to limit the ongoing death spiral / scope of work here.  It was pretty time-consuming in the previous commits to switch to instance methods for `symlink`, `symlink?`, `readlink`, `stat` and `lstat` as all the tests had to be reworked as evident in the changelog.

Indeed, this does also address the short-live object problem.

So... my suggestion here is that we ship this as-is b/c this PR is generally pretty disruptive, and create a new ticket to yank `self.exist?` and fixup the tests accordingly if that's the route we want to go.  At this point, I would rather overestimate the effort on that and break it out.

That same issue / PR can include the work to clean up the short-lived objects where it's possible.  BTW - I do have a commit locally that spiked that effort to see how world-changing it would be, and a lot of our fragile tests broke.  In some cases, it wasn't clear where we could legitimately hold on to a reference vs. where something might change, and that's going to take some detective work to figure out for certain.  Obviously there are implications with changing previously stateless calls to stateful class members (important anywhere the file path is mutable).