Redmine #6570: Improve error messages when encountering unsafe links.

First of all, change the return code when we encounter unsafe symlinks
so that the message in general is more understandable. We're forced to
use errno codes, which doesn't give us the greatest selection, but
ENOLINK ('Link has been severed') seems like the best one.

Also, improve the error message even more for the specific case where
we want to access a file using a file promise inside such a directory,
since that case is very common.
If `openat()` set ENOENT, ENOLINK kinda makes sense, maybe a bit; but not if EEXIST.
OTOH, since neither `open()` nor `openat()` advertises ENOLINK as an error status it might use, it's a kinda reasonable response for us to use here to mean our efforts at trying again failed - as long as we document that use.  In particular, this comment would be more help if it gave that justification for using ENOLINK, rather than claiming this situation is more likely a link in the way (for which ENOLINK makes little sense, on its face).