AFAIK, the only thing tying str to the language is string literals (both in expressions and in patterns), so str would still has to be a lang item even if moved to the library.
Unfortunately, simply moving str to the library now is a breaking change, because built-in types are subject to some special weird name resolution rules.
Actually, I’m a fan of creating a library alias for str, promoting it the documentation and phasing out str itself eventually. This is probably completely crazy, because the library team never reacted on the issue linked below.