The relative-path computation assumed that a relative path was
always possible, but a relative path can't go from one drive
to another.
Also, the relative-path computation didn't take into account
case-insensitivity, so it failed in a different-drive way
when the drive case was different between two paths.
Closesracket/racket#1625
Certain lifted reference forms carried the prefix of the original
section, but in general the section needs to be similarly carried for
rendering elements that may contain references.
Also, fix the contract on `elemref` and `elemtag` to use
`taglet?` instead of `tag?`.
Thanks to Dupéron Georges.