proto: wire decoding support

Add proto.Unmarshal.

Test cases all produce identical results to the v1 unmarshaller.

Change-Id: I42259266018a14e88a650c5d83a043cb17a3a15d
Reviewed-on: https://go-review.googlesource.com/c/153918
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/testprotos/test/test.proto b/internal/testprotos/test/test.proto
new file mode 100644
index 0000000..fcb4174
--- /dev/null
+++ b/internal/testprotos/test/test.proto
@@ -0,0 +1,147 @@
+// Copyright 2018 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+syntax = "proto2";
+
+package goproto.proto.test;
+
+option go_package = "github.com/golang/protobuf/v2/proto/testpb";
+
+message TestAllTypes {
+  message NestedMessage {
+    optional int32 a = 1;
+    optional TestAllTypes corecursive = 2;
+  }
+
+  enum NestedEnum {
+    FOO = 0;
+    BAR = 1;
+    BAZ = 2;
+    NEG = -1;  // Intentionally negative.
+  }
+
+  optional int32         optional_int32    =  1;
+  optional int64         optional_int64    =  2;
+  optional uint32        optional_uint32   =  3;
+  optional uint64        optional_uint64   =  4;
+  optional sint32        optional_sint32   =  5;
+  optional sint64        optional_sint64   =  6;
+  optional fixed32       optional_fixed32  =  7;
+  optional fixed64       optional_fixed64  =  8;
+  optional sfixed32      optional_sfixed32 =  9;
+  optional sfixed64      optional_sfixed64 = 10;
+  optional float         optional_float    = 11;
+  optional double        optional_double   = 12;
+  optional bool          optional_bool     = 13;
+  optional string        optional_string   = 14;
+  optional bytes         optional_bytes    = 15;
+  optional group OptionalGroup = 16 {
+    optional int32 a = 17;
+  }
+  optional NestedMessage optional_nested_message = 18;
+  optional NestedEnum    optional_nested_enum    = 21;
+
+  repeated int32         repeated_int32    = 31;
+  repeated int64         repeated_int64    = 32;
+  repeated uint32        repeated_uint32   = 33;
+  repeated uint64        repeated_uint64   = 34;
+  repeated sint32        repeated_sint32   = 35;
+  repeated sint64        repeated_sint64   = 36;
+  repeated fixed32       repeated_fixed32  = 37;
+  repeated fixed64       repeated_fixed64  = 38;
+  repeated sfixed32      repeated_sfixed32 = 39;
+  repeated sfixed64      repeated_sfixed64 = 40;
+  repeated float         repeated_float    = 41;
+  repeated double        repeated_double   = 42;
+  repeated bool          repeated_bool     = 43;
+  repeated string        repeated_string   = 44;
+  repeated bytes         repeated_bytes    = 45;
+  repeated group RepeatedGroup = 46 {
+    optional int32 a = 47;
+  }
+  repeated NestedMessage repeated_nested_message = 48;
+  repeated NestedEnum    repeated_nested_enum    = 51;
+
+  map <   int32, int32>         map_int32_int32           = 56;
+  map <   int64, int64>         map_int64_int64           = 57;
+  map <  uint32, uint32>        map_uint32_uint32         = 58;
+  map <  uint64, uint64>        map_uint64_uint64         = 59;
+  map <  sint32, sint32>        map_sint32_sint32         = 60;
+  map <  sint64, sint64>        map_sint64_sint64         = 61;
+  map < fixed32, fixed32>       map_fixed32_fixed32       = 62;
+  map < fixed64, fixed64>       map_fixed64_fixed64       = 63;
+  map <sfixed32, sfixed32>      map_sfixed32_sfixed32     = 64;
+  map <sfixed64, sfixed64>      map_sfixed64_sfixed64     = 65;
+  map <   int32, float>         map_int32_float           = 66;
+  map <   int32, double>        map_int32_double          = 67;
+  map <    bool, bool>          map_bool_bool             = 68;
+  map <  string, string>        map_string_string         = 69;
+  map <  string, bytes>         map_string_bytes          = 70;
+  map <  string, NestedMessage> map_string_nested_message = 71;
+  map <  string, NestedEnum>    map_string_nested_enum    = 73;
+
+  oneof oneof_field {
+    uint32        oneof_uint32         = 111;
+    NestedMessage oneof_nested_message = 112;
+    string        oneof_string         = 113;
+    bytes         oneof_bytes          = 114;
+    bool          oneof_bool           = 115;
+    uint64        oneof_uint64         = 116;
+    float         oneof_float          = 117;
+    double        oneof_double         = 118;
+    NestedEnum    oneof_enum           = 119;
+  }
+}
+
+message TestAllExtensions {
+  extensions 1 to max;
+}
+
+extend TestAllExtensions {
+  optional int32    optional_int32_extension    =  1;
+  optional int64    optional_int64_extension    =  2;
+  optional uint32   optional_uint32_extension   =  3;
+  optional uint64   optional_uint64_extension   =  4;
+  optional sint32   optional_sint32_extension   =  5;
+  optional sint64   optional_sint64_extension   =  6;
+  optional fixed32  optional_fixed32_extension  =  7;
+  optional fixed64  optional_fixed64_extension  =  8;
+  optional sfixed32 optional_sfixed32_extension =  9;
+  optional sfixed64 optional_sfixed64_extension = 10;
+  optional float    optional_float_extension    = 11;
+  optional double   optional_double_extension   = 12;
+  optional bool     optional_bool_extension     = 13;
+  optional string   optional_string_extension   = 14;
+  optional bytes    optional_bytes_extension    = 15;
+
+  optional group OptionalGroup_extension = 16 {
+    optional int32 a = 17;
+  }
+
+  optional TestAllTypes.NestedMessage optional_nested_message_extension = 18;
+  optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
+
+  repeated int32    repeated_int32_extension    = 31;
+  repeated int64    repeated_int64_extension    = 32;
+  repeated uint32   repeated_uint32_extension   = 33;
+  repeated uint64   repeated_uint64_extension   = 34;
+  repeated sint32   repeated_sint32_extension   = 35;
+  repeated sint64   repeated_sint64_extension   = 36;
+  repeated fixed32  repeated_fixed32_extension  = 37;
+  repeated fixed64  repeated_fixed64_extension  = 38;
+  repeated sfixed32 repeated_sfixed32_extension = 39;
+  repeated sfixed64 repeated_sfixed64_extension = 40;
+  repeated float    repeated_float_extension    = 41;
+  repeated double   repeated_double_extension   = 42;
+  repeated bool     repeated_bool_extension     = 43;
+  repeated string   repeated_string_extension   = 44;
+  repeated bytes    repeated_bytes_extension    = 45;
+
+  repeated group RepeatedGroup_extension = 46 {
+    optional int32 a = 47;
+  }
+
+  repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
+  repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
+}