goprotobuf: Various improvements to extension handling.

R=r
CC=golang-dev
http://codereview.appspot.com/4917043
diff --git a/proto/decode.go b/proto/decode.go
index 1c2bb3b..fe28821 100644
--- a/proto/decode.go
+++ b/proto/decode.go
@@ -358,7 +358,7 @@
 			iv := unsafe.Unreflect(t, unsafe.Pointer(&o.ptr))
 			if e, ok := iv.(extendableProto); ok && isExtensionField(e, int32(tag)) {
 				if err = o.skip(st, tag, wire); err == nil {
-					e.ExtensionMap()[int32(tag)] = append([]byte(nil), o.buf[oi:o.index]...)
+					e.ExtensionMap()[int32(tag)] = Extension{enc: append([]byte(nil), o.buf[oi:o.index]...)}
 				}
 				continue
 			}