Add Connection ClientSetting (#25)

On Dial, if Connection is not nil, it's used in place of any user
provided gRPC settings or the default.
diff --git a/client_option.go b/client_option.go
index 531a59c..e2fcb23 100644
--- a/client_option.go
+++ b/client_option.go
@@ -24,6 +24,7 @@
 	Scopes      []string
 	CallOptions map[string][]CallOption
 	DialOptions []grpc.DialOption
+	Connection  *grpc.ClientConn
 }
 
 func (w ClientSettings) Resolve(s *ClientSettings) {
@@ -33,6 +34,7 @@
 	WithScopes(w.Scopes...).Resolve(s)
 	WithCallOptions(w.CallOptions).Resolve(s)
 	WithDialOptions(w.DialOptions...).Resolve(s)
+	s.Connection = w.Connection
 }
 
 type withAppName string
@@ -97,3 +99,13 @@
 func WithDialOptions(opts ...grpc.DialOption) ClientOption {
 	return withDialOptions(opts)
 }
+
+type withConnection grpc.ClientConn
+
+func (w *withConnection) Resolve(s *ClientSettings) {
+	s.Connection = (*grpc.ClientConn)(w)
+}
+
+func WithConnection(conn *grpc.ClientConn) ClientOption {
+	return (*withConnection)(conn)
+}
diff --git a/client_option_test.go b/client_option_test.go
index 7862f54..8d1f2cb 100644
--- a/client_option_test.go
+++ b/client_option_test.go
@@ -9,6 +9,7 @@
 )
 
 func TestClientOptionsPieceByPiece(t *testing.T) {
+	conn := &grpc.ClientConn{}
 	expected := &ClientSettings{
 		"myapi",
 		"v0.1.0",
@@ -16,6 +17,7 @@
 		[]string{"https://example.com/auth/helloworld", "https://example.com/auth/otherthing"},
 		map[string][]CallOption{"ListWorlds": []CallOption{WithTimeout(3 * time.Second)}},
 		[]grpc.DialOption{},
+		conn,
 	}
 
 	settings := &ClientSettings{}
@@ -26,6 +28,7 @@
 		WithScopes("https://example.com/auth/helloworld", "https://example.com/auth/otherthing"),
 		WithCallOptions(map[string][]CallOption{"ListWorlds": []CallOption{WithTimeout(3 * time.Second)}}),
 		WithDialOptions(), // Can't compare function signatures for equality.
+		WithConnection(conn),
 	}
 	clientOptions(opts).Resolve(settings)
 
diff --git a/dial.go b/dial.go
index abdb300..34620ba 100644
--- a/dial.go
+++ b/dial.go
@@ -14,6 +14,9 @@
 	settings := &ClientSettings{}
 	clientOptions(opts).Resolve(settings)
 
+	if settings.Connection != nil {
+		return settings.Connection, nil
+	}
 	var dialOpts = settings.DialOptions
 	if len(dialOpts) == 0 {
 		tokenSource, err := google.DefaultTokenSource(ctx, settings.Scopes...)