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. :)
It doesn't return `None`: it would have to return `Err`... but. I don't see any evidence of that, the `with_c_str` calls will still fail if `n` or `v` contains interior NULs.