async function getAvailableName (containingPath, basename, ext = undefined, joiningChar = '-', drive = rootDrive) {
  for (let i = 1; i < 1e9; i++) {
    let name = ((i === 1) ? basename : `${basename}${joiningChar}${i}`) + (ext ? `.${ext}` : '')
    let st = await stat(joinPath(containingPath, name), drive)
    if (!st) return name
  }
  // yikes if this happens
  throw new Error('Unable to find an available name for ' + basename)
}
@param {string} containingPath
@param {string} basename
@param {string} [ext]
@param {string} [joiningChar]
@param {DaemonHyperdrive} [drive]
@returns {Promise<string>}