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 would actually expect inspection of errors to not fall under "an overwhelming majority of rust code does this", but rather just the tip of the stack is the one to inspect the error. Along those lines, I'm not sure I'd put this in the prelude to get access to the methods.

On the other hand, implementing the trait is always convenient if you don't have to import it (and it avoids the `std::error::Error` stutter).

The RFC doesn't look like it mentions any modifications to the prelude, so I'm curious, what was your rationale for placing this here?