bufio: change ReadSlice to match description

On error, ReadSlice is defined to return the available data
and advance past that data, but it was not behaving that
way for err == ErrBufferFull, making it harder for callers to
handle well.

R=r
CC=golang-dev
https://golang.org/cl/1480041
diff --git a/src/pkg/bufio/bufio.go b/src/pkg/bufio/bufio.go
index 1af9545..6a73c41 100644
--- a/src/pkg/bufio/bufio.go
+++ b/src/pkg/bufio/bufio.go
@@ -229,7 +229,8 @@
 
 		// Buffer is full?
 		if b.Buffered() >= len(b.buf) {
-			return nil, ErrBufferFull
+			b.r = b.w
+			return b.buf, ErrBufferFull
 		}
 	}
 	panic("not reached")
@@ -259,20 +260,9 @@
 			break
 		}
 
-		// Read bytes out of buffer.
-		buf := make([]byte, b.Buffered())
-		var n int
-		n, e = b.Read(buf)
-		if e != nil {
-			frag = buf[0:n]
-			err = e
-			break
-		}
-		if n != len(buf) {
-			frag = buf[0:n]
-			err = errInternal
-			break
-		}
+		// Make a copy of the buffer.
+		buf := make([]byte, len(frag))
+		copy(buf, frag)
 
 		// Grow list if needed.
 		if full == nil {