message: Addressed dmytro's comments.
  WIll switch the AttrType typedef once someone ACK's my approach.
diff: @@ -60,9 +60,14 @@ enum Version {
  // version that the graph is generated from. This helps us set up version
  // control. We should use version as
  // xx(major) - xx(minor) - xxxx(bugfix)
  - // and we are starting with 00000001.
  - IR_VERSION = 00000101;
  - IR_VERSION_2017_10_10 = 00000001;
  + // and we are starting with 00000001, which was the
  + // version we published on Oct 10, 2017.
  + IR_VERSION_2017_10_10 = 0x00000001;
  +
  + // IR_VERSION 1.1.0 (this proto file) contains the following IR format changes
  + // - Added type discriminator to AttributeProto to support proto3 users
  +
  + IR_VERSION = 0x00000101;
  }
  @@ -73,15 +78,15 @@ enum Version {
  // following content fields, effectively enforcing a C/C++ union equivalent.
  enum AttributeType {
  - STRING = 0;
  - FLOAT = 1;
  - INT = 2;
  + FLOAT = 0;
  + INT = 1;
  + STRING = 2;
  TENSOR = 3;
  GRAPH = 4;
  - STRINGS = 5;
  - FLOATS = 6;
  - INTS = 7;
  + FLOATS = 5;
  + INTS = 6;
  + STRINGS = 7;
  TENSORS = 8;
  GRAPHS = 9;
  }
  @@ -89,21 +94,27 @@ enum AttributeType {
  message AttributeProto {
  // The name field MUST be present for this version of the IR.
  optional string name = 1; // namespace Attribute
  +
  // The type field MUST be present for this version of the IR.
  - optional AttributeType type = 2; // discriminator that indicates which field below is in use
  + // For 1.0.0 versions of the IR, this field was not defined, and
  + // implementations needed to use has_field hueristics to determine
  + // which value field was in use. For IR_VERSION 1.0.1 or later, this
  + // field MUST be set and match the f|i|s|t|... field in use. This
  + // change was made to accomodate proto3 implementations.
  + optional AttributeType type = 20; // discriminator that indicates which field below is in use
  // Exactly ONE of the following fields must be present for this version of the IR
  - optional float f = 3; // float
  - optional int64 i = 4; // int
  - optional bytes s = 5; // UTF-8 string
  - optional TensorProto t = 6; // tensor value
  - optional GraphProto g = 7; // graph
  -
  - repeated float floats = 8; // list of floats
  - repeated int64 ints = 9; // list of ints
  - repeated bytes strings = 10; // list of UTF-8 strings
  - repeated TensorProto tensors = 11; // list of tensors
  - repeated GraphProto graphs = 12; // list of graph
  + optional float f = 2; // float
  + optional int64 i = 3; // int
  + optional bytes s = 4; // UTF-8 string
  + optional TensorProto t = 5; // tensor value
  + optional GraphProto g = 6; // graph
  +
  + repeated float floats = 7; // list of floats
  + repeated int64 ints = 8; // list of ints
  + repeated bytes strings = 9; // list of UTF-8 strings
  + repeated TensorProto tensors = 10; // list of tensors
  + repeated GraphProto graphs = 11; // list of graph
  }
  // Defines information on value, including the name, the type, and
  