Refactoring std os setenv

Hello!

After talking with @huonw on Irc and trying different thing, I purpose to add a error handling over this wrapper of libc::setenv for catching errors.

I will need some help on the two commit marked as `fixup!`. I am still a newbie to rust. :)
FIXME:
```
/home/travis/build/mozilla/rust/src/libstd/os.rs:1651:26:
1651:27 error: mismatched types: expected `&str` but found `collections::string::String` (expected &-ptr but found struct collections::string::String)

/home/travis/build/mozilla/rust/src/libstd/os.rs:1651 let ret = setenv(n, "VALUE");
```