Workqueue: interface, test, and posix implementation
diff --git a/build.yaml b/build.yaml
index 757ba13..31c3b23 100644
--- a/build.yaml
+++ b/build.yaml
@@ -63,6 +63,7 @@
     src/core/iomgr/socket_windows.h, src/core/iomgr/tcp_client.h, src/core/iomgr/tcp_posix.h,
     src/core/iomgr/tcp_server.h, src/core/iomgr/tcp_windows.h, src/core/iomgr/time_averaged_stats.h,
     src/core/iomgr/udp_server.h, src/core/iomgr/wakeup_fd_pipe.h, src/core/iomgr/wakeup_fd_posix.h,
+    src/core/iomgr/workqueue.h, src/core/iomgr/workqueue_posix.h, src/core/iomgr/workqueue_windows.h,
     src/core/json/json.h, src/core/json/json_common.h, src/core/json/json_reader.h,
     src/core/json/json_writer.h, src/core/profiling/timers.h, src/core/statistics/census_interface.h,
     src/core/statistics/census_rpc_stats.h, src/core/surface/byte_buffer_queue.h,
@@ -104,16 +105,17 @@
     src/core/iomgr/tcp_client_windows.c, src/core/iomgr/tcp_posix.c, src/core/iomgr/tcp_server_posix.c,
     src/core/iomgr/tcp_server_windows.c, src/core/iomgr/tcp_windows.c, src/core/iomgr/time_averaged_stats.c,
     src/core/iomgr/udp_server.c, src/core/iomgr/wakeup_fd_eventfd.c, src/core/iomgr/wakeup_fd_nospecial.c,
-    src/core/iomgr/wakeup_fd_pipe.c, src/core/iomgr/wakeup_fd_posix.c, src/core/json/json.c,
-    src/core/json/json_reader.c, src/core/json/json_string.c, src/core/json/json_writer.c,
-    src/core/profiling/basic_timers.c, src/core/profiling/stap_timers.c, src/core/surface/byte_buffer.c,
-    src/core/surface/byte_buffer_queue.c, src/core/surface/byte_buffer_reader.c, src/core/surface/call.c,
-    src/core/surface/call_details.c, src/core/surface/call_log_batch.c, src/core/surface/channel.c,
-    src/core/surface/channel_connectivity.c, src/core/surface/channel_create.c, src/core/surface/completion_queue.c,
-    src/core/surface/event_string.c, src/core/surface/init.c, src/core/surface/lame_client.c,
-    src/core/surface/metadata_array.c, src/core/surface/server.c, src/core/surface/server_chttp2.c,
-    src/core/surface/server_create.c, src/core/surface/surface_trace.c, src/core/surface/version.c,
-    src/core/transport/chttp2/alpn.c, src/core/transport/chttp2/bin_encoder.c, src/core/transport/chttp2/frame_data.c,
+    src/core/iomgr/wakeup_fd_pipe.c, src/core/iomgr/wakeup_fd_posix.c, src/core/iomgr/workqueue_posix.c,
+    src/core/iomgr/workqueue_windows.c, src/core/json/json.c, src/core/json/json_reader.c,
+    src/core/json/json_string.c, src/core/json/json_writer.c, src/core/profiling/basic_timers.c,
+    src/core/profiling/stap_timers.c, src/core/surface/byte_buffer.c, src/core/surface/byte_buffer_queue.c,
+    src/core/surface/byte_buffer_reader.c, src/core/surface/call.c, src/core/surface/call_details.c,
+    src/core/surface/call_log_batch.c, src/core/surface/channel.c, src/core/surface/channel_connectivity.c,
+    src/core/surface/channel_create.c, src/core/surface/completion_queue.c, src/core/surface/event_string.c,
+    src/core/surface/init.c, src/core/surface/lame_client.c, src/core/surface/metadata_array.c,
+    src/core/surface/server.c, src/core/surface/server_chttp2.c, src/core/surface/server_create.c,
+    src/core/surface/surface_trace.c, src/core/surface/version.c, src/core/transport/chttp2/alpn.c,
+    src/core/transport/chttp2/bin_encoder.c, src/core/transport/chttp2/frame_data.c,
     src/core/transport/chttp2/frame_goaway.c, src/core/transport/chttp2/frame_ping.c,
     src/core/transport/chttp2/frame_rst_stream.c, src/core/transport/chttp2/frame_settings.c,
     src/core/transport/chttp2/frame_window_update.c, src/core/transport/chttp2/hpack_parser.c,
@@ -741,6 +743,11 @@
   language: c
   src: [test/core/client_config/uri_parser_test.c]
   deps: [grpc_test_util, grpc, gpr_test_util, gpr]
+- name: workqueue_test
+  build: test
+  language: c
+  src: [test/core/iomgr/workqueue_test.c]
+  deps: [grpc_test_util, grpc, gpr_test_util, gpr]
 - name: async_end2end_test
   build: test
   language: c++