Improve the experience of using syntax extensions with #![no_std]

This isn't as exciting as crate capture for macros, but it removes a number of immediate pain points.
When libcollections is built with `cfg(test)` it links the real libstd.  This means that `to_string` returns an `std::string::String`, re-exported from a previous build of libcollections, rather than the `string::String` defined in the crate under test.  We can still compare them with `.as_slice()`, but for most purposes it's better to use `string::String`.