func RemoveAll(fs billy.Basic, path string) error {
	fs, path = getUnderlyingAndPath(fs, path)
	if r, ok := fs.(removerAll); ok {
		return r.RemoveAll(path)
	}
	return removeAll(fs, path)
}
RemoveAll removes path and any children it contains. It removes everything it
can but returns the first error it encounters. If the path does not exist,
RemoveAll returns nil (no error).
package util
import (
	"io"
	"os"
	"path/filepath"
	"strconv"
	"sync"
	"time"
	"gopkg.in/src-d/go-billy.v4"
)