Implement error interoperation (RFC 70)

This PR:

* Adds the error interoperation traits (`Error` and `FromError`) to a new module, `std::error`, as per [RFC 70](https://github.com/rust-lang/rfcs/blob/master/active/0070-error-chaining.md). Note that this module must live in `std` in order to refer to `String`.

    Note that, until multidispatch lands, the `FromError` trait cannot be
usefully implemented outside of the blanket impl given here.

* Adds `std::error::Error` to the prelude.

* Incorporates `std::error::FromError` into the `try!` macro.

* Implements `Error` for most existing error enumerations.

Closes #17747

Due to the addition of `Error` to the prelude, this is a:

[breaking-change]
I was just writing a comment to get your opinion about this. You're right, it wasn't mentioned in the RFC and for that reason alone probably shouldn't happen here.

I also worry about having the name `Error` show up in the prelude. So maybe an explicit import makes more sense.

(My rationale was just that you'd generally expect methods like `description` to be available on error types without needing to import a trait, but that's pretty weak sauce.)