GenericPath: implement .relativize()

But... Well... See next commit.
GenericPath: try and test a part of the contract which is false...

We take two paths p and q, with q being on a different FileSystem but with the
same FileSystemProvider. We make q with no root component (since we use a
Unix-like path scheme, this also means not absolute). We make p absolute or not,
in turn.

Then we check this part of the relativize() contract:

p.relativize(p.resolve(q)).equals(q)

This must return true. But it does not! The filesystem associated with the
resulting path DOES have the correct path elements, but its filesystem is that
of q, not p, and Path's .equals() requires that FileSystems be equal if Paths
are to be equal.