title: Avro: Keep backwards capability using default value in new field without using writer/old schema
body: <p>AVRO can handle most common forwards and backwards compatibility. But it somehow needs the writer schema when reading the data using a newer schema.</p>
  
  <p>Saying there is a old schema:</p>
  
  <pre><code>{
    "type": "record",
    "name": "com.test.Contact",
    "fields": [
      {
        "name": "address",
        "type": "string"
      }
    ]
  }
  </code></pre>
  
  <p>If using the following new schema to decode bytes that written by old schema, it is needed to have both old and new schema.</p>
  
  <pre><code>{
    "type": "record",
    "name": "com.test.Contact",
    "fields": [
      {
        "name": "address",
        "type": "string"
      },
      {
        "name": "phone",
        "type": ["null", "string"],
        "default": null
      }
    ]
  }
  </code></pre>
  
  <p>The code to read</p>
  
  <pre><code>    static void sede3() throws IOException {
          System.out.println("----------------------sede3---------------------");
          Schema.Parser parserNew = new Schema.Parser();
          Schema.Parser parserOld = new Schema.Parser();
          Schema addrSchemaNew = parserNew.parse(AppMainCore.class.getClassLoader()
                  .getResourceAsStream("compatibility-new.schema.json"));
          Schema addrSchemaOld = parserOld.parse(AppMainCore.class.getClassLoader()
                  .getResourceAsStream("compatibility-old.schema.json"));
  
          GenericRecord addressOld = new GenericData.Record(addrSchemaOld);
          addressOld.put("address", "ABCDEF");
          // Generate bytes using old schema.
          ByteArrayOutputStream bbos = new ByteArrayOutputStream();
          Encoder encoder = EncoderFactory.get().binaryEncoder(bbos, null);
          DatumWriter&lt;GenericRecord&gt; writer = new GenericDatumWriter&lt;&gt;(addrSchemaOld);
          writer.write(addressOld, encoder);
          encoder.flush();
          bbos.close();
          byte[] oldBytes = bbos.toByteArray();
          System.out.println(Hex.encodeHexString(oldBytes) + " is old record bytes");
          // Try to deserialize old bytes using new schema, with old schema's help
          DatumReader&lt;GenericRecord&gt; readerGood = new GenericDatumReader&lt;&gt;(addrSchemaOld, addrSchemaNew);
          Decoder decoderGood = DecoderFactory.get().binaryDecoder(oldBytes, null);
          GenericRecord goodAddress = readerGood.read(null, decoderGood);
  
          System.out.println(goodAddress + " is record from old bytes using new schema");
      }
  </code></pre>
  
  <p>What I am trying is deserializing old bytes using new schema, WITHOUT old schema's help.</p>
  
  <p>like:</p>
  
  <pre><code>DatumReader&lt;GenericRecord&gt; readerGood = new GenericDatumReader&lt;&gt;(addrSchemaNew);
  </code></pre>
  
  <p>But not </p>
  
  <pre><code>DatumReader&lt;GenericRecord&gt; readerGood = new GenericDatumReader&lt;&gt;(addrSchemaOld, addrSchemaNew);
  </code></pre>
  
  <p>Is it supported in Avro?</p>