Work around #8256, do not fail the task, just return None
libsyntax/ext/deriving/cmp/* was ignored by the build system.
syntax: make #[deriving(TotalOrd)] lazy.

Previously it would call:

  f(sf1.cmp(&of1), f(sf2.cmp(&of2), ...))

(where s/of1 = 'self/other field 1', and f was
std::cmp::lexical_ordering)

This meant that every .cmp subcall got evaluated when calling a derived
TotalOrd.cmp.

This corrects this to use

   let test = sf1.cmp(&of1);
   if test == Equal {
      let test = sf2.cmp(&of2);
      if test == Equal {
        // ...
      } else {
        test
      }
   } else {
     test
   }

This gives a lexical ordering by short-circuiting on the first comparison
that is not Equal.
std: implement Total{Ord,Eq} for pointers.
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
fix warning still mentioning the `again` keyword
Implemented iterator for TrieMap

Closes #5506.
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
Remove debug printing.