Behave gracefully when text formatting a map field with a nil value.

Fixes #33.
diff --git a/proto/text.go b/proto/text.go
index 720eac4..4ad1590 100644
--- a/proto/text.go
+++ b/proto/text.go
@@ -283,20 +283,23 @@
 				if err := w.WriteByte('\n'); err != nil {
 					return err
 				}
-				// value
-				if _, err := w.WriteString("value:"); err != nil {
-					return err
-				}
-				if !w.compact {
-					if err := w.WriteByte(' '); err != nil {
+				// nil values aren't legal, but we can avoid panicking because of them.
+				if val.Kind() != reflect.Ptr || !val.IsNil() {
+					// value
+					if _, err := w.WriteString("value:"); err != nil {
 						return err
 					}
-				}
-				if err := writeAny(w, val, props.mvalprop); err != nil {
-					return err
-				}
-				if err := w.WriteByte('\n'); err != nil {
-					return err
+					if !w.compact {
+						if err := w.WriteByte(' '); err != nil {
+							return err
+						}
+					}
+					if err := writeAny(w, val, props.mvalprop); err != nil {
+						return err
+					}
+					if err := w.WriteByte('\n'); err != nil {
+						return err
+					}
 				}
 				// close struct
 				w.unindent()
diff --git a/proto/text_test.go b/proto/text_test.go
index 03e9a98..39861d1 100644
--- a/proto/text_test.go
+++ b/proto/text_test.go
@@ -426,6 +426,11 @@
 			&pb.MessageWithMap{NameMapping: map[int32]string{1234: "Feist"}},
 			`name_mapping:<key:1234 value:"Feist" >`,
 		},
+		// map with nil value; not well-defined, but we shouldn't crash
+		{
+			&pb.MessageWithMap{MsgMapping: map[int64]*pb.FloatingPoint{7: nil}},
+			`msg_mapping:<key:7 >`,
+		},
 	}
 	for _, test := range tests {
 		got := strings.TrimSpace(test.m.String())