Implement `Error` and `Display` for `SharedError` when possible
Implement `Error` and `Display` for `SharedError` when possible

`impl Error for SharedError<E>` enables us to use some useful
functionalities such as
`impl<E: Error+Send+Sync> From<E> for Box<Error+Send+Sync>`.

`impl Display for SharedError<E>` is required by `Error` trait.

alexcrichton/futures-rs