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). Node that this module must live in `std` in order to refer to `String`.

* Adds `std::error::Error` to the prelude.

* Implements `Error` for most existing error enumerations.

Closes #17747

Due to the addition of `Error` to the prelude, this is a:

[breaking-change]