uses Path instead unparsed ~str in several places; removal of StrUtil::to_ascii_{upper,lower} in favor of the standard StrAsciiExt.