docs: def connectCached(self, endpoint, protocolFactory,
                        extraWork=lambda x: x,
                        extraHash=None):
          """
          See module docstring
  
          @param endpoint:
          @param protocolFactory:
          @param extraWork:
          @param extraHash:
  
          @return: the D
          """
          key = endpoint, extraHash
          D = Deferred()
          if key in self.cachedConnections:
              D.callback(self.cachedConnections[key])
          elif key in self.inProgress:
              self.inProgress[key].append(D)
          else:
              self.inProgress[key] = [D]
              endpoint.connect(
                  _CachingClientFactory(
                      self, key, protocolFactory,
                      extraWork))
          return D