std: minor cleanup
std: add str.to_c_str()
std: rewrite run::with_{argv,envp,dirp} to copy C strings
std: remove str::NullTerminatedStr
std: cleanup os and str tests
std: add test for str::as_c_str
std: remove str::from_bytes_with_null
extra: make sure time::match_digits does not read past the end of the str
std: replace str::as_c_str with std::c_str
std and rustc: explicitly pass c strings to c functions

When strings lose their trailing null, this pattern will become dangerous:

let foo = "bar";
let foo_ptr: *u8 = &foo[0];

Instead we should use c_strs to handle this correctly.
std: merge str::raw::from_buf and str::raw::from_c_str
std: remove use of cast module from os.
Remove trailing null from strings
Merge remote-tracking branch 'remotes/origin/master' into str-remove-null
std: Update the c_str docs, and support CString not owning the pointer
std: fix a typo where .to_c_str wasn't being called on android
std: c_str should use regions on methods
Implement FromStr for IpAddr and SocketAddr

Better than that in rt::uv::net, because it:

* handles invalid input explicitly, without fail!()
* parses socket address, not just IP
* handles various ipv4-in-ipv6 addresses, like 2001:db8:122:344::192.0.2.33
  (see http://tools.ietf.org/html/rfc6052 for example)
* rejects output like `127.0000000.0.1`
* does not allocate heap memory
* have unit tests
Use FromStr for IpAddr in rt::uv::net
Better documentation for --emit-llvm option.

Document possible use with -S option.