title: associatedtype protocol conformance issues
body: <p>I have 3 protocols to define a relationship where a <code>Mediator</code> uses <code>Host</code> to extract <code>Client</code></p>
  <ol>
  <li><code>Host</code></li>
  <li><code>Client</code></li>
  <li><code>Mediator</code></li>
  </ol>
  <p>My goal is to have <code>Host</code> also act as a <code>Mediator</code>. These are my class and protocol definitions:</p>
  <pre><code>class Host {}
  class Client {}
  
  protocol HostProtocol {}
  protocol ClientProtocol {}
  
  extension Host: HostProtocol {}
  extension Client: ClientProtocol {}
  
  protocol MediatorProtocol {
      associatedtype H = HostProtocol
      associatedtype C = ClientProtocol
  
      func getClientFrom(host: H) -&gt; C?
  }
  </code></pre>
  <p>I then extend my <code>MediatorProtocol</code> to add an implementation</p>
  <pre><code>extension MediatorProtocol where H == Host, C == Client {
      func getClientFrom(host: H) -&gt; C? {
          return Client()
      }
  }
  </code></pre>
  <p>Now when I try to make my Host conform to MediatorProtocol, I get an error saying</p>
  <blockquote>
  <p>Type 'Host' does not conform to protocol MediatorProtocol</p>
  </blockquote>
  <pre><code>extension Host: MediatorProtocol {}
  </code></pre>
  <p>Any ideas?</p>