Add ResponseError exception class

This class is for erroneous states that occur after a response has been
downloaded from the server. Examples include a server that is raising many 500
server errors (with a Retry object coded to forbid this) or a redirect cycle
that exceeds the specified redirect limit.

In addition, ensures that all objects passed as the `reason` parameter to
MaxRetryError are Exception objects.