Move back to StrAllocating.

This defines a `StrAllocating` trait and switches back to taking strings
by value in several public functions.

This is hopefully a temporary measure until the standard library
provides more impls for a trait like `IntoString`.

I switched back because the `ToOwned` trait is *not* a suitable
replacement for `StrAllocating` or `IntoString`. Namely, `ToOwned` takes
`self` by reference, which requires a copy if the value is owned.

[breaking-change]
0.12.0