init currently takes "errors", which in some places is a dict, and other places is just a string error. This task will be to normalize that (probably construct with a single "error" string, which can be str(errors) in the former case.
After first trying to preserve the OperationTimedOut API (map of errors by host), I realized that it will not be possible in all cases. For example, it is not possible to generate a host/error list for this, where all we have are incomplete futures for bool results:
There are also a bunch of instances in connection.py that create one without a map. I still think we should flatten the error map and make the exception take a string, but it will have to wait for 4.0 so we can change it.