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.
This is an excessively long summary for the function. Can you write up a shorter one-line summary first? Remember, the first line is displayed as a one-line summary in the API documentation, and the rest of the docstring is only displayed when looking at the function itself.

Similarly, `split_paths()` has an excessively long summary and could benefit from a rewrite there as well.