parseAttribute and parseType require null-terminated strings as
input, but this isn't great considering the argument type is
StringRef. This changes them to copy to a null-terminated buffer by
default, with a isKnownNullTerminated flag added to disable the
copying.
closes #58964
nit: typeStr.str()? Also everywhere else