Don't allocate a string when calling println

Instead use format_args! to pass around a struct to pass along into std::fmt
auto merge of #9979 : alexcrichton/rust/print-no-alloc, r=huonw

Instead use format_args! to pass around a struct to pass along into std::fmt
Allow fail messages to be caught, introduce Any trait
Some code cleanup, sorting of import blocks
Removed std::unstable::UnsafeArc's use of Either
Reduced number of Any trait object extension trait impls down
to one each
Added run-fail tests for the new FailWithCause impls
Made Option and Results methods more similar, restructured
their source layout.

- Renamed the `Result` methods on `Err` values from `NAME_err`
  to `err_NAME` to make the methods flow better into the argument.
  Compare `res.err_unwrap_or(foo)` and `res.unwrap_or_err(foo)`
- Renamed `map_default` to `map_or` to make it more similar to the
  boolean-logic-like naming conventions already in use, and to
  make it not confusing in regard to the `Default` trait.
  Instead, there could be `NAME_default` methods that use that trait.
- Added more methods on `Result` to make it equal with `Option` for
  non-option-specific operations.
- Added a `sys::FailWithCause` impl for
  `<C: FailWithCause> &fn() -> C` that calls the closure to
  compute the fail cause, and made `expect()`'s custom
  fail message generic over `FailWithCause`. This enables lazy
  evaluation of a failure message, while still allowing to pass a
  `&'static str` without additional overhead.
  Example: `None.expect("static str message")` vs
  `None.expect(|| format!("Expensive to compute allocating error message
  with {}. ", expensive_calculation()))`