Add support for targetFs override etc

...for copy and copyTree.

-   Add rejoin, joins paths that were split. More differenter than join
    because join is actually "resolve".
-   Removed base FS root method, because it was not being used.
    Will need to explore real solutions to the Windows drive problem.
-   Moved implementation of `relative` to fs-common from fs-base because
    it presupposes an async isDirectory.
-   Implement `canonical` in JavaScript because `realpath` does not
    handle path remainder.
-   `reroot` now returns a file system, not a promise for a file system,
    and should now actually work due to fixes to `canonical`.
-   Fixed reroot attenuate method.
Update change log.
2.0.4