'return a new path by appending all \'args\' as path
components.  if abs=1 is used restart from root if any
of the args is an absolute path.'

def join(self, *args, **kwargs):

    sep = self.sep
    strargs = [fspath(arg) for arg in args]
    strpath = self.strpath
    if kwargs.get('abs'):
        newargs = []
        for arg in reversed(strargs):
            if isabs(arg):
                strpath = arg
                strargs = newargs
                break
            newargs.insert(0, arg)
    for arg in strargs:
        arg = arg.strip(sep)
        if iswin32:
            arg = arg.strip('/')
            arg = arg.replace('/', sep)
        strpath = ((strpath + sep) + arg)
    obj = object.__new__(self.__class__)
    obj.strpath = normpath(strpath)
    return obj
