Custom exception class for urllib3 MaxRetryError.

This commit implements a new requests.exceptions.MaxRetryError class as a subclass of requests.exceptions.ConnectionError
requests.adapters.HTTPAdapter raises this exception at the occurance of a urllib3.exceptions.MaxRetryError, instead
of raising it as the generic ConnectionError.

Useful to implement a custom HTTPAdapter for retrying -

class RetryHTTPAdapter(HTTPAdapter):
    """
    Transport adapter to specify max_retries, delay interval between
    retries.

    """
    def __init__(self, max_failures, interval):
        super(RetryHTTPAdapter, self).__init__()

        self.max_failures = max_failures
        self.interval = interval

        self.log = get_logger()

    def send(self, request, stream=False, timeout=None, verify=True, cert=None,
             proxies=None):
        failures = 0
        while failures < self.max_failures:
            try:
                return super(RetryHTTPAdapter, self).send(
                    request, stream, timeout, verify, cert, proxies)
            except requests.exceptions.MaxRetryError:
                failures += 1

                self.log.info(
                    'RetryHTTPAdapter got MaxRetryError. Number of failed '
                    'attempts: {0}, max_failures: {1}. '.format(
                    failures, self.max_failures))

                sleep(self.interval)
        raise