Package fspath contains routines for fspath manipulation
CheckConfigName returns an error if configName is invalid
CheckRemoteName returns an error if remoteName is invalid
JoinRootPath joins filePath onto remote
If the remote has a leading "//" this is preserved to allow Windows network paths to be used as remotes.
If filePath is empty then remote will be returned.
If the path contains \ these will be converted to / on Windows.
Parse deconstructs a remote path into configName and fsPath
If the path is a local path then configName will be returned as "".
So "remote:path/to/dir" will return "remote", "path/to/dir" and "/path/to/local" will return ("", "/path/to/local")
Note that this will turn \ into / in the fsPath on Windows
An error may be returned if the remote name has invalid characters in it or if the path is empty.
Split splits a remote into a parent and a leaf
if it returns leaf as an empty string then remote is a directory
if it returns parent as an empty string then that means the current directory
The returned values have the property that parent + leaf == remote (except under Windows where \ will be translated into /)