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 simplest thing to do here would really to just special-case `unparsed.container_as_bytes().len() == 0` to return `vec![]` (which would presumably happen in the outer `split_paths()` so it applies to Windows too). But I'd welcome input from anyone else as to whether it's worth trying to behave closer to bash, or whether this one change is sufficient.