goprotobuf: Various improvements to extension handling.

R=r
CC=golang-dev
http://codereview.appspot.com/4917043
diff --git a/proto/encode.go b/proto/encode.go
index 3952dc4..5736153 100644
--- a/proto/encode.go
+++ b/proto/encode.go
@@ -576,9 +576,12 @@
 
 // Encode an extension map.
 func (o *Buffer) enc_map(p *Properties, base uintptr) os.Error {
-	v := *(*map[int32][]byte)(unsafe.Pointer(base + p.offset))
-	for _, b := range v {
-		o.buf = append(o.buf, b...)
+	v := *(*map[int32]Extension)(unsafe.Pointer(base + p.offset))
+	if err := encodeExtensionMap(v); err != nil {
+		return err
+	}
+	for _, e := range v {
+		o.buf = append(o.buf, e.enc...)
 	}
 	return nil
 }