goprotobuf: Repeated extensions.

Also picks up a tweak to the JSON tags of the XXX_ fields.

R=r
CC=golang-dev
http://codereview.appspot.com/6175045
diff --git a/proto/decode.go b/proto/decode.go
index f259b7d..de885f6 100644
--- a/proto/decode.go
+++ b/proto/decode.go
@@ -357,7 +357,9 @@
 			iv := reflect.NewAt(st, unsafe.Pointer(base)).Interface()
 			if e, ok := iv.(extendableProto); ok && isExtensionField(e, int32(tag)) {
 				if err = o.skip(st, tag, wire); err == nil {
-					e.ExtensionMap()[int32(tag)] = Extension{enc: append([]byte(nil), o.buf[oi:o.index]...)}
+					ext := e.ExtensionMap()[int32(tag)] // may be missing
+					ext.enc = append(ext.enc, o.buf[oi:o.index]...)
+					e.ExtensionMap()[int32(tag)] = ext
 				}
 				continue
 			}