title: support var!? in protocol
body: <p>i have 3 classes</p>
  
  <pre><code>class A {
      var uid: Int64!
      var countryCode: String? // &lt;-- Attention 
  }
  
  class B {
      var uid: Int64!
      var countryCode: String! // &lt;-- Attention
  }
  
  class C {
      var uid: Int64!
      var countryCode: String = "AA" // &lt;-- Attention
  }
  </code></pre>
  
  <p>witch var for example <code>countryCode</code> as <code>String?</code>, <code>String!</code>
  , <code>String</code></p>
  
  <p>and i create protocol, witch var as <code>String?</code> (As the weakest type to which you can bring all the others)</p>
  
  <pre><code>protocol FullCode {
      var uid: Int64! { get }
      var countryCode: String? { get } // &lt;-- How to describe a variable for all (`T`, `T!`, `T?`) types?
  }
  
  extension FullCode {
      var fullCode: String? { return "specificCode"}
  }
  </code></pre>
  
  <p>bat if i added it to  my classes</p>
  
  <pre><code>extension A : FullCode {}
  extension B : FullCode {}
  extension C : FullCode {}
  </code></pre>
  
  <p>i get error for classes B &amp; C. </p>
  
  <p>How can use one protocol for these types?</p>