std::os - Add join_paths, make setenv non-utf8 capable

This commit changes `os` in two ways:

* It adds a `join_paths` function that is the converse to `split_paths`,
  easing manipulation of the `PATH` environment variable according to
  platform conventions.

* It changes `setenv` to take a `BytesContainer` rather than a `&str`
  value, since environment variables may have non-utf8 values on some
  platforms. Since `&str` is a `BytesContainer`, this is *not* a
  breaking change.

Along the way, it also refactors the `split_paths` function so that
`cfg` switches are applied internally (and the function header is given
only once). This fixes a bug: the doc comment had an example for only
one platform.
The dominant documentation style is to use the third-person singular present indicative (i.e. put the trailing `-s` on the verb), as in:

> Parses input according to platform conventions for the `PATH` environment variable.

There's an open issue #4361 that covers making a decision about this, but as long as you're rewriting docstrings, it would be nice to write them to be in line with the prevailing style (it's both the prevailing style across all the Rust stdlibs and also the prevailing style within the `std::os` mod).