RFC: Error Reform and Failure Box

This RFC proposes four things:

* a reform to the `Error` trait to support better messages.
* a new `Failure<T>` wrapper for errors to support optional tracebacks.
* a `ConstructFailure` trait to support interoperability between errors and failures.
* New `try!` and `fail!` macros that use `ConstructFailure` instead of `FromError`.

[Rendered View](https://github.com/mitsuhiko/rfcs/blob/failure-box/text/0000-failure-box.md)
Not yet in the RFC because I need to validate those numbers, but I get this currently:

```
test bench_large_result_3    ... bench:       134 ns/iter (+/- 37)
test bench_large_result_7    ... bench:       205 ns/iter (+/- 128)
test bench_large_result_ok_3 ... bench:        14 ns/iter (+/- 8)
test bench_large_result_ok_7 ... bench:        26 ns/iter (+/- 27)
test bench_small_result_3    ... bench:       128 ns/iter (+/- 38)
test bench_small_result_7    ... bench:       134 ns/iter (+/- 41)
test bench_small_result_ok_3 ... bench:         8 ns/iter (+/- 4)
test bench_small_result_ok_7 ... bench:        13 ns/iter (+/- 12)
```

`_N` means that it went through `N` stack frames.  `large_result` means that it's thrown without boxing, `small_result` is the same error in a `Box`.  The error thrown is a regular `IoError`.

Code is in the `rust-incidents` repo.