stream_op cleanup: build system changes
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj b/vsprojects/vcxproj/grpc/grpc.vcxproj
index dc85131..0ca8734 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj
@@ -277,6 +277,7 @@
     <ClInclude Include="..\..\..\src\core\channel\http_client_filter.h" />
     <ClInclude Include="..\..\..\src\core\channel\http_server_filter.h" />
     <ClInclude Include="..\..\..\src\core\channel\noop_filter.h" />
+    <ClInclude Include="..\..\..\src\core\channel\subchannel_call_holder.h" />
     <ClInclude Include="..\..\..\src\core\client_config\client_config.h" />
     <ClInclude Include="..\..\..\src\core\client_config\connector.h" />
     <ClInclude Include="..\..\..\src\core\client_config\lb_policies\pick_first.h" />
@@ -343,7 +344,6 @@
     <ClInclude Include="..\..\..\src\core\statistics\census_interface.h" />
     <ClInclude Include="..\..\..\src\core\statistics\census_rpc_stats.h" />
     <ClInclude Include="..\..\..\src\core\surface\api_trace.h" />
-    <ClInclude Include="..\..\..\src\core\surface\byte_buffer_queue.h" />
     <ClInclude Include="..\..\..\src\core\surface\call.h" />
     <ClInclude Include="..\..\..\src\core\surface\call_test_only.h" />
     <ClInclude Include="..\..\..\src\core\surface\channel.h" />
@@ -352,6 +352,7 @@
     <ClInclude Include="..\..\..\src\core\surface\init.h" />
     <ClInclude Include="..\..\..\src\core\surface\server.h" />
     <ClInclude Include="..\..\..\src\core\surface\surface_trace.h" />
+    <ClInclude Include="..\..\..\src\core\transport\byte_stream.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\alpn.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\bin_encoder.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\frame.h" />
@@ -361,6 +362,7 @@
     <ClInclude Include="..\..\..\src\core\transport\chttp2\frame_rst_stream.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\frame_settings.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\frame_window_update.h" />
+    <ClInclude Include="..\..\..\src\core\transport\chttp2\hpack_encoder.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\hpack_parser.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\hpack_table.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\http2_errors.h" />
@@ -368,14 +370,13 @@
     <ClInclude Include="..\..\..\src\core\transport\chttp2\incoming_metadata.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\internal.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\status_conversion.h" />
-    <ClInclude Include="..\..\..\src\core\transport\chttp2\stream_encoder.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\stream_map.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\timeout_encoding.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\varint.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2_transport.h" />
     <ClInclude Include="..\..\..\src\core\transport\connectivity_state.h" />
     <ClInclude Include="..\..\..\src\core\transport\metadata.h" />
-    <ClInclude Include="..\..\..\src\core\transport\stream_op.h" />
+    <ClInclude Include="..\..\..\src\core\transport\metadata_batch.h" />
     <ClInclude Include="..\..\..\src\core\transport\transport.h" />
     <ClInclude Include="..\..\..\src\core\transport\transport_impl.h" />
     <ClInclude Include="..\..\..\src\core\census\aggregation.h" />
@@ -447,6 +448,8 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\channel\noop_filter.c">
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\channel\subchannel_call_holder.c">
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\client_config\client_config.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\client_config\connector.c">
@@ -585,8 +588,6 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\surface\byte_buffer.c">
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\surface\byte_buffer_queue.c">
-    </ClCompile>
     <ClCompile Include="..\..\..\src\core\surface\byte_buffer_reader.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\surface\call.c">
@@ -619,6 +620,8 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\surface\version.c">
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\transport\byte_stream.c">
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\alpn.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\bin_encoder.c">
@@ -635,6 +638,8 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\frame_window_update.c">
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\transport\chttp2\hpack_encoder.c">
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\hpack_parser.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\hpack_table.c">
@@ -647,8 +652,6 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\status_conversion.c">
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\transport\chttp2\stream_encoder.c">
-    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\stream_lists.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\stream_map.c">
@@ -665,7 +668,7 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\metadata.c">
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\transport\stream_op.c">
+    <ClCompile Include="..\..\..\src\core\transport\metadata_batch.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\transport.c">
     </ClCompile>
diff --git a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
index 66dd86e..daace30 100644
--- a/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc/grpc.vcxproj.filters
@@ -97,6 +97,9 @@
     <ClCompile Include="..\..\..\src\core\channel\noop_filter.c">
       <Filter>src\core\channel</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\channel\subchannel_call_holder.c">
+      <Filter>src\core\channel</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\client_config\client_config.c">
       <Filter>src\core\client_config</Filter>
     </ClCompile>
@@ -304,9 +307,6 @@
     <ClCompile Include="..\..\..\src\core\surface\byte_buffer.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\surface\byte_buffer_queue.c">
-      <Filter>src\core\surface</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\..\src\core\surface\byte_buffer_reader.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
@@ -355,6 +355,9 @@
     <ClCompile Include="..\..\..\src\core\surface\version.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\transport\byte_stream.c">
+      <Filter>src\core\transport</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\alpn.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
@@ -379,6 +382,9 @@
     <ClCompile Include="..\..\..\src\core\transport\chttp2\frame_window_update.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\transport\chttp2\hpack_encoder.c">
+      <Filter>src\core\transport\chttp2</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\hpack_parser.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
@@ -397,9 +403,6 @@
     <ClCompile Include="..\..\..\src\core\transport\chttp2\status_conversion.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\transport\chttp2\stream_encoder.c">
-      <Filter>src\core\transport\chttp2</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\stream_lists.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
@@ -424,7 +427,7 @@
     <ClCompile Include="..\..\..\src\core\transport\metadata.c">
       <Filter>src\core\transport</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\transport\stream_op.c">
+    <ClCompile Include="..\..\..\src\core\transport\metadata_batch.c">
       <Filter>src\core\transport</Filter>
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\transport.c">
@@ -542,6 +545,9 @@
     <ClInclude Include="..\..\..\src\core\channel\noop_filter.h">
       <Filter>src\core\channel</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\src\core\channel\subchannel_call_holder.h">
+      <Filter>src\core\channel</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\src\core\client_config\client_config.h">
       <Filter>src\core\client_config</Filter>
     </ClInclude>
@@ -740,9 +746,6 @@
     <ClInclude Include="..\..\..\src\core\surface\api_trace.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\..\src\core\surface\byte_buffer_queue.h">
-      <Filter>src\core\surface</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\..\src\core\surface\call.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>
@@ -767,6 +770,9 @@
     <ClInclude Include="..\..\..\src\core\surface\surface_trace.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\src\core\transport\byte_stream.h">
+      <Filter>src\core\transport</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\src\core\transport\chttp2\alpn.h">
       <Filter>src\core\transport\chttp2</Filter>
     </ClInclude>
@@ -794,6 +800,9 @@
     <ClInclude Include="..\..\..\src\core\transport\chttp2\frame_window_update.h">
       <Filter>src\core\transport\chttp2</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\src\core\transport\chttp2\hpack_encoder.h">
+      <Filter>src\core\transport\chttp2</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\src\core\transport\chttp2\hpack_parser.h">
       <Filter>src\core\transport\chttp2</Filter>
     </ClInclude>
@@ -815,9 +824,6 @@
     <ClInclude Include="..\..\..\src\core\transport\chttp2\status_conversion.h">
       <Filter>src\core\transport\chttp2</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\..\src\core\transport\chttp2\stream_encoder.h">
-      <Filter>src\core\transport\chttp2</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\..\src\core\transport\chttp2\stream_map.h">
       <Filter>src\core\transport\chttp2</Filter>
     </ClInclude>
@@ -836,7 +842,7 @@
     <ClInclude Include="..\..\..\src\core\transport\metadata.h">
       <Filter>src\core\transport</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\..\src\core\transport\stream_op.h">
+    <ClInclude Include="..\..\..\src\core\transport\metadata_batch.h">
       <Filter>src\core\transport</Filter>
     </ClInclude>
     <ClInclude Include="..\..\..\src\core\transport\transport.h">
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
index d3e2fdd..617e0d1 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj
@@ -256,6 +256,7 @@
     <ClInclude Include="..\..\..\src\core\channel\http_client_filter.h" />
     <ClInclude Include="..\..\..\src\core\channel\http_server_filter.h" />
     <ClInclude Include="..\..\..\src\core\channel\noop_filter.h" />
+    <ClInclude Include="..\..\..\src\core\channel\subchannel_call_holder.h" />
     <ClInclude Include="..\..\..\src\core\client_config\client_config.h" />
     <ClInclude Include="..\..\..\src\core\client_config\connector.h" />
     <ClInclude Include="..\..\..\src\core\client_config\lb_policies\pick_first.h" />
@@ -322,7 +323,6 @@
     <ClInclude Include="..\..\..\src\core\statistics\census_interface.h" />
     <ClInclude Include="..\..\..\src\core\statistics\census_rpc_stats.h" />
     <ClInclude Include="..\..\..\src\core\surface\api_trace.h" />
-    <ClInclude Include="..\..\..\src\core\surface\byte_buffer_queue.h" />
     <ClInclude Include="..\..\..\src\core\surface\call.h" />
     <ClInclude Include="..\..\..\src\core\surface\call_test_only.h" />
     <ClInclude Include="..\..\..\src\core\surface\channel.h" />
@@ -331,6 +331,7 @@
     <ClInclude Include="..\..\..\src\core\surface\init.h" />
     <ClInclude Include="..\..\..\src\core\surface\server.h" />
     <ClInclude Include="..\..\..\src\core\surface\surface_trace.h" />
+    <ClInclude Include="..\..\..\src\core\transport\byte_stream.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\alpn.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\bin_encoder.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\frame.h" />
@@ -340,6 +341,7 @@
     <ClInclude Include="..\..\..\src\core\transport\chttp2\frame_rst_stream.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\frame_settings.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\frame_window_update.h" />
+    <ClInclude Include="..\..\..\src\core\transport\chttp2\hpack_encoder.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\hpack_parser.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\hpack_table.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\http2_errors.h" />
@@ -347,14 +349,13 @@
     <ClInclude Include="..\..\..\src\core\transport\chttp2\incoming_metadata.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\internal.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\status_conversion.h" />
-    <ClInclude Include="..\..\..\src\core\transport\chttp2\stream_encoder.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\stream_map.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\timeout_encoding.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2\varint.h" />
     <ClInclude Include="..\..\..\src\core\transport\chttp2_transport.h" />
     <ClInclude Include="..\..\..\src\core\transport\connectivity_state.h" />
     <ClInclude Include="..\..\..\src\core\transport\metadata.h" />
-    <ClInclude Include="..\..\..\src\core\transport\stream_op.h" />
+    <ClInclude Include="..\..\..\src\core\transport\metadata_batch.h" />
     <ClInclude Include="..\..\..\src\core\transport\transport.h" />
     <ClInclude Include="..\..\..\src\core\transport\transport_impl.h" />
     <ClInclude Include="..\..\..\src\core\census\aggregation.h" />
@@ -386,6 +387,8 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\channel\noop_filter.c">
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\channel\subchannel_call_holder.c">
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\client_config\client_config.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\client_config\connector.c">
@@ -524,8 +527,6 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\surface\byte_buffer.c">
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\surface\byte_buffer_queue.c">
-    </ClCompile>
     <ClCompile Include="..\..\..\src\core\surface\byte_buffer_reader.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\surface\call.c">
@@ -558,6 +559,8 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\surface\version.c">
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\transport\byte_stream.c">
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\alpn.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\bin_encoder.c">
@@ -574,6 +577,8 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\frame_window_update.c">
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\transport\chttp2\hpack_encoder.c">
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\hpack_parser.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\hpack_table.c">
@@ -586,8 +591,6 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\status_conversion.c">
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\transport\chttp2\stream_encoder.c">
-    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\stream_lists.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\stream_map.c">
@@ -604,7 +607,7 @@
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\metadata.c">
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\transport\stream_op.c">
+    <ClCompile Include="..\..\..\src\core\transport\metadata_batch.c">
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\transport.c">
     </ClCompile>
diff --git a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
index e19c6dd..f23bd66 100644
--- a/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/vcxproj/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -37,6 +37,9 @@
     <ClCompile Include="..\..\..\src\core\channel\noop_filter.c">
       <Filter>src\core\channel</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\channel\subchannel_call_holder.c">
+      <Filter>src\core\channel</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\client_config\client_config.c">
       <Filter>src\core\client_config</Filter>
     </ClCompile>
@@ -244,9 +247,6 @@
     <ClCompile Include="..\..\..\src\core\surface\byte_buffer.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\surface\byte_buffer_queue.c">
-      <Filter>src\core\surface</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\..\src\core\surface\byte_buffer_reader.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
@@ -295,6 +295,9 @@
     <ClCompile Include="..\..\..\src\core\surface\version.c">
       <Filter>src\core\surface</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\transport\byte_stream.c">
+      <Filter>src\core\transport</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\alpn.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
@@ -319,6 +322,9 @@
     <ClCompile Include="..\..\..\src\core\transport\chttp2\frame_window_update.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
+    <ClCompile Include="..\..\..\src\core\transport\chttp2\hpack_encoder.c">
+      <Filter>src\core\transport\chttp2</Filter>
+    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\hpack_parser.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
@@ -337,9 +343,6 @@
     <ClCompile Include="..\..\..\src\core\transport\chttp2\status_conversion.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\transport\chttp2\stream_encoder.c">
-      <Filter>src\core\transport\chttp2</Filter>
-    </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\chttp2\stream_lists.c">
       <Filter>src\core\transport\chttp2</Filter>
     </ClCompile>
@@ -364,7 +367,7 @@
     <ClCompile Include="..\..\..\src\core\transport\metadata.c">
       <Filter>src\core\transport</Filter>
     </ClCompile>
-    <ClCompile Include="..\..\..\src\core\transport\stream_op.c">
+    <ClCompile Include="..\..\..\src\core\transport\metadata_batch.c">
       <Filter>src\core\transport</Filter>
     </ClCompile>
     <ClCompile Include="..\..\..\src\core\transport\transport.c">
@@ -440,6 +443,9 @@
     <ClInclude Include="..\..\..\src\core\channel\noop_filter.h">
       <Filter>src\core\channel</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\src\core\channel\subchannel_call_holder.h">
+      <Filter>src\core\channel</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\src\core\client_config\client_config.h">
       <Filter>src\core\client_config</Filter>
     </ClInclude>
@@ -638,9 +644,6 @@
     <ClInclude Include="..\..\..\src\core\surface\api_trace.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\..\src\core\surface\byte_buffer_queue.h">
-      <Filter>src\core\surface</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\..\src\core\surface\call.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>
@@ -665,6 +668,9 @@
     <ClInclude Include="..\..\..\src\core\surface\surface_trace.h">
       <Filter>src\core\surface</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\src\core\transport\byte_stream.h">
+      <Filter>src\core\transport</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\src\core\transport\chttp2\alpn.h">
       <Filter>src\core\transport\chttp2</Filter>
     </ClInclude>
@@ -692,6 +698,9 @@
     <ClInclude Include="..\..\..\src\core\transport\chttp2\frame_window_update.h">
       <Filter>src\core\transport\chttp2</Filter>
     </ClInclude>
+    <ClInclude Include="..\..\..\src\core\transport\chttp2\hpack_encoder.h">
+      <Filter>src\core\transport\chttp2</Filter>
+    </ClInclude>
     <ClInclude Include="..\..\..\src\core\transport\chttp2\hpack_parser.h">
       <Filter>src\core\transport\chttp2</Filter>
     </ClInclude>
@@ -713,9 +722,6 @@
     <ClInclude Include="..\..\..\src\core\transport\chttp2\status_conversion.h">
       <Filter>src\core\transport\chttp2</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\..\src\core\transport\chttp2\stream_encoder.h">
-      <Filter>src\core\transport\chttp2</Filter>
-    </ClInclude>
     <ClInclude Include="..\..\..\src\core\transport\chttp2\stream_map.h">
       <Filter>src\core\transport\chttp2</Filter>
     </ClInclude>
@@ -734,7 +740,7 @@
     <ClInclude Include="..\..\..\src\core\transport\metadata.h">
       <Filter>src\core\transport</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\..\src\core\transport\stream_op.h">
+    <ClInclude Include="..\..\..\src\core\transport\metadata_batch.h">
       <Filter>src\core\transport</Filter>
     </ClInclude>
     <ClInclude Include="..\..\..\src\core\transport\transport.h">
diff --git a/vsprojects/vcxproj/test/chttp2_stream_encoder_test/chttp2_stream_encoder_test.vcxproj b/vsprojects/vcxproj/test/chttp2_hpack_encoder_test/chttp2_hpack_encoder_test.vcxproj
similarity index 97%
rename from vsprojects/vcxproj/test/chttp2_stream_encoder_test/chttp2_stream_encoder_test.vcxproj
rename to vsprojects/vcxproj/test/chttp2_hpack_encoder_test/chttp2_hpack_encoder_test.vcxproj
index d789b66..0ea6082 100644
--- a/vsprojects/vcxproj/test/chttp2_stream_encoder_test/chttp2_stream_encoder_test.vcxproj
+++ b/vsprojects/vcxproj/test/chttp2_hpack_encoder_test/chttp2_hpack_encoder_test.vcxproj
@@ -20,7 +20,7 @@
     </ProjectConfiguration>
   </ItemGroup>
   <PropertyGroup Label="Globals">
-    <ProjectGuid>{351E03A2-CB70-0ACC-6767-6BB806E6D0D0}</ProjectGuid>
+    <ProjectGuid>{19F92966-3B0E-4FF8-CD7C-435D353E079E}</ProjectGuid>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
@@ -55,13 +55,13 @@
   </ImportGroup>
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Condition="'$(Configuration)'=='Debug'">
-    <TargetName>chttp2_stream_encoder_test</TargetName>
+    <TargetName>chttp2_hpack_encoder_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)'=='Release'">
-    <TargetName>chttp2_stream_encoder_test</TargetName>
+    <TargetName>chttp2_hpack_encoder_test</TargetName>
     <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
     <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
@@ -143,7 +143,7 @@
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <ClCompile Include="..\..\..\..\test\core\transport\chttp2\stream_encoder_test.c">
+    <ClCompile Include="..\..\..\..\test\core\transport\chttp2\hpack_encoder_test.c">
     </ClCompile>
   </ItemGroup>
   <ItemGroup>
diff --git a/vsprojects/vcxproj/test/chttp2_stream_encoder_test/chttp2_stream_encoder_test.vcxproj.filters b/vsprojects/vcxproj/test/chttp2_hpack_encoder_test/chttp2_hpack_encoder_test.vcxproj.filters
similarity index 61%
rename from vsprojects/vcxproj/test/chttp2_stream_encoder_test/chttp2_stream_encoder_test.vcxproj.filters
rename to vsprojects/vcxproj/test/chttp2_hpack_encoder_test/chttp2_hpack_encoder_test.vcxproj.filters
index f29b98a..69618eb 100644
--- a/vsprojects/vcxproj/test/chttp2_stream_encoder_test/chttp2_stream_encoder_test.vcxproj.filters
+++ b/vsprojects/vcxproj/test/chttp2_hpack_encoder_test/chttp2_hpack_encoder_test.vcxproj.filters
@@ -1,23 +1,23 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup>
-    <ClCompile Include="..\..\..\..\test\core\transport\chttp2\stream_encoder_test.c">
+    <ClCompile Include="..\..\..\..\test\core\transport\chttp2\hpack_encoder_test.c">
       <Filter>test\core\transport\chttp2</Filter>
     </ClCompile>
   </ItemGroup>
 
   <ItemGroup>
     <Filter Include="test">
-      <UniqueIdentifier>{01c7a278-37fe-3b5b-07b2-69fb1ab246c7}</UniqueIdentifier>
+      <UniqueIdentifier>{9f3df7e9-611c-d646-6cf2-1e65b7b54a47}</UniqueIdentifier>
     </Filter>
     <Filter Include="test\core">
-      <UniqueIdentifier>{da538a0c-295f-5530-0f16-6a227560fcd9}</UniqueIdentifier>
+      <UniqueIdentifier>{1ce97eb1-bf5d-a8cf-3f95-9c52a21bbf44}</UniqueIdentifier>
     </Filter>
     <Filter Include="test\core\transport">
-      <UniqueIdentifier>{39eab8e8-fc1b-b11b-cf8f-13ca8250b447}</UniqueIdentifier>
+      <UniqueIdentifier>{7cff31aa-23df-9b0b-0296-586c4174cf87}</UniqueIdentifier>
     </Filter>
     <Filter Include="test\core\transport\chttp2">
-      <UniqueIdentifier>{bce0b929-ff48-3397-2cd9-63dba2f62bcc}</UniqueIdentifier>
+      <UniqueIdentifier>{857eb49b-3f20-db68-a434-106b1e6c1a41}</UniqueIdentifier>
     </Filter>
   </ItemGroup>
 </Project>
diff --git a/vsprojects/vcxproj/test/grpc_stream_op_test/grpc_stream_op_test.vcxproj b/vsprojects/vcxproj/test/grpc_stream_op_test/grpc_stream_op_test.vcxproj
deleted file mode 100644
index b341959..0000000
--- a/vsprojects/vcxproj/test/grpc_stream_op_test/grpc_stream_op_test.vcxproj
+++ /dev/null
@@ -1,184 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.props" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\1.0.2.3.props')" />
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{57A3E872-6249-DD62-96D3-F45B3DEA29B5}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(VisualStudioVersion)' == '10.0'" Label="Configuration">
-    <PlatformToolset>v100</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(VisualStudioVersion)' == '11.0'" Label="Configuration">
-    <PlatformToolset>v110</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'" Label="Configuration">
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)'=='Debug'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)'=='Release'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="..\..\..\..\vsprojects\global.props" />
-    <Import Project="..\..\..\..\vsprojects\openssl.props" />
-    <Import Project="..\..\..\..\vsprojects\winsock.props" />
-    <Import Project="..\..\..\..\vsprojects\zlib.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)'=='Debug'">
-    <TargetName>grpc_stream_op_test</TargetName>
-    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
-    <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
-    <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)'=='Release'">
-    <TargetName>grpc_stream_op_test</TargetName>
-    <Linkage-grpc_dependencies_zlib>static</Linkage-grpc_dependencies_zlib>
-    <Configuration-grpc_dependencies_zlib>Debug</Configuration-grpc_dependencies_zlib>
-    <Configuration-grpc_dependencies_openssl>Debug</Configuration-grpc_dependencies_openssl>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <SDLCheck>true</SDLCheck>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
-      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <SDLCheck>true</SDLCheck>
-      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
-      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_USE_32BIT_TIME_T;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <SDLCheck>true</SDLCheck>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
-      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>NotUsing</PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <SDLCheck>true</SDLCheck>
-      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
-      <TreatWarningAsError>true</TreatWarningAsError>
-      <DebugInformationFormat Condition="$(Jenkins)">None</DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation Condition="!$(Jenkins)">true</GenerateDebugInformation>
-      <GenerateDebugInformation Condition="$(Jenkins)">false</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="..\..\..\..\test\core\transport\stream_op_test.c">
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\grpc_test_util\grpc_test_util.vcxproj">
-      <Project>{17BCAFC0-5FDC-4C94-AEB9-95F3E220614B}</Project>
-    </ProjectReference>
-    <ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\grpc\grpc.vcxproj">
-      <Project>{29D16885-7228-4C31-81ED-5F9187C7F2A9}</Project>
-    </ProjectReference>
-    <ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\gpr_test_util\gpr_test_util.vcxproj">
-      <Project>{EAB0A629-17A9-44DB-B5FF-E91A721FE037}</Project>
-    </ProjectReference>
-    <ProjectReference Include="..\..\..\..\vsprojects\vcxproj\.\gpr\gpr.vcxproj">
-      <Project>{B23D3D1A-9438-4EDA-BEB6-9A0A03D17792}</Project>
-    </ProjectReference>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="packages.config" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies.zlib.redist.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
-  <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies.zlib.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies\grpc.dependencies.zlib.targets')" />
-  <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies.openssl.redist.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
-  <Import Project="..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.targets" Condition="Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies\grpc.dependencies.openssl.targets')" />
-  </ImportGroup>
-  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
-    <PropertyGroup>
-      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
-    </PropertyGroup>
-    <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\native\grpc.dependencies.zlib.redist.targets')" />
-    <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies.zlib.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.zlib.1.2.8.9\build\native\grpc.dependencies.zlib.targets')" />
-    <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.redist.1.0.2.3\build\native\grpc.dependencies.openssl.redist.targets')" />
-    <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.props')" />
-    <Error Condition="!Exists('..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\..\vsprojects\packages\grpc.dependencies.openssl.1.0.2.3\build\native\grpc.dependencies.openssl.targets')" />
-  </Target>
-</Project>
-
diff --git a/vsprojects/vcxproj/test/grpc_stream_op_test/grpc_stream_op_test.vcxproj.filters b/vsprojects/vcxproj/test/grpc_stream_op_test/grpc_stream_op_test.vcxproj.filters
deleted file mode 100644
index 1920c7c..0000000
--- a/vsprojects/vcxproj/test/grpc_stream_op_test/grpc_stream_op_test.vcxproj.filters
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <ClCompile Include="..\..\..\..\test\core\transport\stream_op_test.c">
-      <Filter>test\core\transport</Filter>
-    </ClCompile>
-  </ItemGroup>
-
-  <ItemGroup>
-    <Filter Include="test">
-      <UniqueIdentifier>{0bc5eec5-02cf-0679-8301-9a61f71209ee}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="test\core">
-      <UniqueIdentifier>{926b341e-7212-055e-3448-a0ac1cf3df6b}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="test\core\transport">
-      <UniqueIdentifier>{4143e3e9-c69f-2764-a373-468e8355c924}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-</Project>
-