go.net/websocket: allow server configurable

Add websocket.Server to configure WebSocket server handler.

- Config.Header is additional headers to send, so you can use it
  to send cookies or so.
  To read cookies, you can use Conn.Request().Header.
- factor out Handshake.
  You can set func to check origin, subprotocol etc.
  Handler checks origin by default.

Fixes golang/go#4198.
Fixes golang/go#5178.

R=golang-dev, mikioh.mikioh, crobin
CC=golang-dev
https://golang.org/cl/8731044
diff --git a/websocket/client.go b/websocket/client.go
index e59da0b..df54a68 100644
--- a/websocket/client.go
+++ b/websocket/client.go
@@ -9,6 +9,7 @@
 	"crypto/tls"
 	"io"
 	"net"
+	"net/http"
 	"net/url"
 )
 
@@ -34,6 +35,7 @@
 	if err != nil {
 		return
 	}
+	config.Header = http.Header(make(map[string][]string))
 	return
 }