Implement WriterTo

Avoids allocation/copy when writing byteview to a writer.
diff --git a/byteview.go b/byteview.go
index 035a9ee..a2c2c49 100644
--- a/byteview.go
+++ b/byteview.go
@@ -158,3 +158,18 @@
 	}
 	return
 }
+
+// WriteTo implements io.WriterTo on the bytes in v.
+func (v ByteView) WriteTo(w io.Writer) (n int64, err error) {
+	var m int
+	if v.b != nil {
+		m, err = w.Write(v.b)
+	} else {
+		m, err = io.WriteString(w, v.s)
+	}
+	if err == nil && m < v.Len() {
+		err = io.ErrShortWrite
+	}
+	n = int64(m)
+	return
+}
diff --git a/byteview_test.go b/byteview_test.go
index 9ece00f..a09757a 100644
--- a/byteview_test.go
+++ b/byteview_test.go
@@ -17,6 +17,7 @@
 package groupcache
 
 import (
+	"bytes"
 	"fmt"
 	"io"
 	"io/ioutil"
@@ -47,6 +48,10 @@
 			if got, err := ioutil.ReadAll(io.NewSectionReader(v, 0, int64(len(s)))); err != nil || string(got) != s {
 				t.Errorf("%s: SectionReader of ReaderAt = %q, %v; want %q", name, got, err, s)
 			}
+			var dest bytes.Buffer
+			if _, err := v.WriteTo(&dest); err != nil || !bytes.Equal(dest.Bytes(), []byte(s)) {
+				t.Errorf("%s: WriteTo = %q, %v; want %q", name, dest.Bytes(), err, s)
+			}
 		}
 	}
 }