Two separate changes that got intertwined (sorry):
Make to_str pure. Closes #3691
In str, change functions like push_char to take an &mut str instead of
an &str. Closes #3710
Test that it's possible to write "impl of B for A" outside a class,
where A is a class type. This didn't require any extra work, but it's
still good to have a regression test.
Closes #2287