Factor out channel state watching
diff --git a/BUILD b/BUILD
index af27125..201d844 100644
--- a/BUILD
+++ b/BUILD
@@ -152,6 +152,7 @@
     "src/core/channel/channel_stack.h",
     "src/core/channel/client_channel.h",
     "src/core/channel/connected_channel.h",
+    "src/core/channel/connectivity_state.h",
     "src/core/channel/context.h",
     "src/core/channel/http_client_filter.h",
     "src/core/channel/http_server_filter.h",
@@ -268,6 +269,7 @@
     "src/core/channel/channel_stack.c",
     "src/core/channel/client_channel.c",
     "src/core/channel/connected_channel.c",
+    "src/core/channel/connectivity_state.c",
     "src/core/channel/http_client_filter.c",
     "src/core/channel/http_server_filter.c",
     "src/core/channel/noop_filter.c",
@@ -400,6 +402,7 @@
     "src/core/channel/channel_stack.h",
     "src/core/channel/client_channel.h",
     "src/core/channel/connected_channel.h",
+    "src/core/channel/connectivity_state.h",
     "src/core/channel/context.h",
     "src/core/channel/http_client_filter.h",
     "src/core/channel/http_server_filter.h",
@@ -494,6 +497,7 @@
     "src/core/channel/channel_stack.c",
     "src/core/channel/client_channel.c",
     "src/core/channel/connected_channel.c",
+    "src/core/channel/connectivity_state.c",
     "src/core/channel/http_client_filter.c",
     "src/core/channel/http_server_filter.c",
     "src/core/channel/noop_filter.c",
@@ -930,13 +934,23 @@
     "src/core/census/grpc_context.c",
     "src/core/channel/channel_args.c",
     "src/core/channel/channel_stack.c",
-    "src/core/channel/child_channel.c",
     "src/core/channel/client_channel.c",
-    "src/core/channel/client_setup.c",
     "src/core/channel/connected_channel.c",
+    "src/core/channel/connectivity_state.c",
     "src/core/channel/http_client_filter.c",
     "src/core/channel/http_server_filter.c",
     "src/core/channel/noop_filter.c",
+    "src/core/client_config/client_config.c",
+    "src/core/client_config/connector.c",
+    "src/core/client_config/lb_policies/pick_first.c",
+    "src/core/client_config/lb_policy.c",
+    "src/core/client_config/resolver.c",
+    "src/core/client_config/resolver_factory.c",
+    "src/core/client_config/resolver_registry.c",
+    "src/core/client_config/resolvers/dns_resolver.c",
+    "src/core/client_config/subchannel.c",
+    "src/core/client_config/subchannel_factory.c",
+    "src/core/client_config/uri_parser.c",
     "src/core/compression/algorithm.c",
     "src/core/compression/message_compress.c",
     "src/core/debug/trace.c",
@@ -989,7 +1003,6 @@
     "src/core/surface/call_log_batch.c",
     "src/core/surface/channel.c",
     "src/core/surface/channel_create.c",
-    "src/core/surface/client.c",
     "src/core/surface/completion_queue.c",
     "src/core/surface/event_string.c",
     "src/core/surface/init.c",
@@ -1010,11 +1023,15 @@
     "src/core/transport/chttp2/hpack_parser.c",
     "src/core/transport/chttp2/hpack_table.c",
     "src/core/transport/chttp2/huffsyms.c",
+    "src/core/transport/chttp2/incoming_metadata.c",
+    "src/core/transport/chttp2/parsing.c",
     "src/core/transport/chttp2/status_conversion.c",
     "src/core/transport/chttp2/stream_encoder.c",
+    "src/core/transport/chttp2/stream_lists.c",
     "src/core/transport/chttp2/stream_map.c",
     "src/core/transport/chttp2/timeout_encoding.c",
     "src/core/transport/chttp2/varint.c",
+    "src/core/transport/chttp2/writing.c",
     "src/core/transport/chttp2_transport.c",
     "src/core/transport/metadata.c",
     "src/core/transport/stream_op.c",
@@ -1034,14 +1051,24 @@
     "src/core/channel/census_filter.h",
     "src/core/channel/channel_args.h",
     "src/core/channel/channel_stack.h",
-    "src/core/channel/child_channel.h",
     "src/core/channel/client_channel.h",
-    "src/core/channel/client_setup.h",
     "src/core/channel/connected_channel.h",
+    "src/core/channel/connectivity_state.h",
     "src/core/channel/context.h",
     "src/core/channel/http_client_filter.h",
     "src/core/channel/http_server_filter.h",
     "src/core/channel/noop_filter.h",
+    "src/core/client_config/client_config.h",
+    "src/core/client_config/connector.h",
+    "src/core/client_config/lb_policies/pick_first.h",
+    "src/core/client_config/lb_policy.h",
+    "src/core/client_config/resolver.h",
+    "src/core/client_config/resolver_factory.h",
+    "src/core/client_config/resolver_registry.h",
+    "src/core/client_config/resolvers/dns_resolver.h",
+    "src/core/client_config/subchannel.h",
+    "src/core/client_config/subchannel_factory.h",
+    "src/core/client_config/uri_parser.h",
     "src/core/compression/message_compress.h",
     "src/core/debug/trace.h",
     "src/core/iomgr/alarm.h",
@@ -1084,7 +1111,6 @@
     "src/core/surface/byte_buffer_queue.h",
     "src/core/surface/call.h",
     "src/core/surface/channel.h",
-    "src/core/surface/client.h",
     "src/core/surface/completion_queue.h",
     "src/core/surface/event_string.h",
     "src/core/surface/init.h",
@@ -1103,6 +1129,8 @@
     "src/core/transport/chttp2/hpack_table.h",
     "src/core/transport/chttp2/http2_errors.h",
     "src/core/transport/chttp2/huffsyms.h",
+    "src/core/transport/chttp2/incoming_metadata.h",
+    "src/core/transport/chttp2/internal.h",
     "src/core/transport/chttp2/status_conversion.h",
     "src/core/transport/chttp2/stream_encoder.h",
     "src/core/transport/chttp2/stream_map.h",