Made fail! and assert! accept both &'static str and ~str, as well as a fmt! like format list.

r? @brson

Unwinding through macros now happens as a call to the trait function `FailWithCause::fail_with()`, which consumes self, allowing to use a more generic failure object in the future.