After GrpcLibrary refactoring. Compiles and passes. WIP still
diff --git a/BUILD b/BUILD
index 59e4c44..0b8ee07 100644
--- a/BUILD
+++ b/BUILD
@@ -785,6 +785,7 @@
     "src/cpp/common/call.cc",
     "src/cpp/common/channel_arguments.cc",
     "src/cpp/common/completion_queue.cc",
+    "src/cpp/common/grpc_library_initializer.cc",
     "src/cpp/common/rpc_method.cc",
     "src/cpp/proto/proto_utils.cc",
     "src/cpp/server/async_generic_service.cc",
@@ -801,6 +802,7 @@
     "src/cpp/util/status.cc",
     "src/cpp/util/string_ref.cc",
     "src/cpp/util/time.cc",
+    "src/cpp/codegen/grpc_library.cc",
   ],
   hdrs = [
     "include/grpc++/channel.h",
@@ -854,6 +856,7 @@
     "include/grpc++/impl/codegen/completion_queue_tag.h",
     "include/grpc++/impl/codegen/config.h",
     "include/grpc++/impl/codegen/config_protobuf.h",
+    "include/grpc++/impl/codegen/grpc_library.h",
     "include/grpc++/impl/codegen/proto_utils.h",
     "include/grpc++/impl/codegen/security/auth_context.h",
     "include/grpc++/impl/codegen/serialization_traits.h",
@@ -863,6 +866,7 @@
     "include/grpc++/impl/codegen/status.h",
     "include/grpc++/impl/codegen/status_code_enum.h",
     "include/grpc++/impl/codegen/string_ref.h",
+    "include/grpc++/impl/codegen/stub_options.h",
     "include/grpc++/impl/codegen/sync.h",
     "include/grpc++/impl/codegen/sync_cxx11.h",
     "include/grpc++/impl/codegen/sync_no_cxx11.h",
@@ -900,6 +904,7 @@
     "src/cpp/common/call.cc",
     "src/cpp/common/channel_arguments.cc",
     "src/cpp/common/completion_queue.cc",
+    "src/cpp/common/grpc_library_initializer.cc",
     "src/cpp/common/rpc_method.cc",
     "src/cpp/proto/proto_utils.cc",
     "src/cpp/server/async_generic_service.cc",
@@ -916,6 +921,7 @@
     "src/cpp/util/status.cc",
     "src/cpp/util/string_ref.cc",
     "src/cpp/util/time.cc",
+    "src/cpp/codegen/grpc_library.cc",
   ],
   hdrs = [
     "include/grpc++/channel.h",
@@ -969,6 +975,7 @@
     "include/grpc++/impl/codegen/completion_queue_tag.h",
     "include/grpc++/impl/codegen/config.h",
     "include/grpc++/impl/codegen/config_protobuf.h",
+    "include/grpc++/impl/codegen/grpc_library.h",
     "include/grpc++/impl/codegen/proto_utils.h",
     "include/grpc++/impl/codegen/security/auth_context.h",
     "include/grpc++/impl/codegen/serialization_traits.h",
@@ -978,6 +985,7 @@
     "include/grpc++/impl/codegen/status.h",
     "include/grpc++/impl/codegen/status_code_enum.h",
     "include/grpc++/impl/codegen/string_ref.h",
+    "include/grpc++/impl/codegen/stub_options.h",
     "include/grpc++/impl/codegen/sync.h",
     "include/grpc++/impl/codegen/sync_cxx11.h",
     "include/grpc++/impl/codegen/sync_no_cxx11.h",
@@ -1018,6 +1026,7 @@
     "src/compiler/objective_c_generator.cc",
     "src/compiler/python_generator.cc",
     "src/compiler/ruby_generator.cc",
+    "src/cpp/codegen/grpc_library.cc",
   ],
   hdrs = [
     "include/grpc++/impl/codegen/async_stream.h",
@@ -1028,6 +1037,7 @@
     "include/grpc++/impl/codegen/completion_queue_tag.h",
     "include/grpc++/impl/codegen/config.h",
     "include/grpc++/impl/codegen/config_protobuf.h",
+    "include/grpc++/impl/codegen/grpc_library.h",
     "include/grpc++/impl/codegen/proto_utils.h",
     "include/grpc++/impl/codegen/security/auth_context.h",
     "include/grpc++/impl/codegen/serialization_traits.h",
@@ -1037,6 +1047,7 @@
     "include/grpc++/impl/codegen/status.h",
     "include/grpc++/impl/codegen/status_code_enum.h",
     "include/grpc++/impl/codegen/string_ref.h",
+    "include/grpc++/impl/codegen/stub_options.h",
     "include/grpc++/impl/codegen/sync.h",
     "include/grpc++/impl/codegen/sync_cxx11.h",
     "include/grpc++/impl/codegen/sync_no_cxx11.h",