Add WGPUFuture, and implement for WorkDone in Metal + wire

This implements the WGPUFuture version of OnSubmittedWorkDone for the
Metal backend, as well as in the wire (over the old implementation).

This is a partial implementation of WGPUFuture. It sits alongside the
old API until it's complete and has all of the breaking API changes
we're going to make. (See bug dawn:2021.)

For more on WGPUFuture, see the design doc in bug dawn:1987.

Bug: dawn:1987, dawn:2021
Change-Id: If0c82279addf419ef16cc0280416ce2bfb71895f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/137502
Kokoro: Kokoro <noreply+kokoro@google.com>
Auto-Submit: Kai Ninomiya <kainino@chromium.org>
Commit-Queue: Austin Eng <enga@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
Reviewed-by: Austin Eng <enga@chromium.org>
diff --git a/dawn_wire.json b/dawn_wire.json
index 5b78ea5..9137f2d 100644
--- a/dawn_wire.json
+++ b/dawn_wire.json
@@ -172,6 +172,7 @@
     },
     "special items": {
         "client_side_structures": [
+            "FutureWaitInfo",
             "SurfaceDescriptorFromMetalLayer",
             "SurfaceDescriptorFromWindowsHWND",
             "SurfaceDescriptorFromXlibWindow",
@@ -207,6 +208,7 @@
             "QuerySetGetType",
             "QuerySetGetCount",
             "QueueOnSubmittedWorkDone",
+            "QueueOnSubmittedWorkDoneF",
             "QueueWriteBuffer",
             "QueueWriteTexture",
             "TextureGetWidth",
@@ -226,6 +228,8 @@
             "DeviceGetQueue",
             "DeviceGetSupportedSurfaceUsage",
             "DeviceInjectError",
+            "InstanceProcessEvents",
+            "InstanceWaitAny",
             "SwapChainGetCurrentTexture"
         ],
         "client_special_objects": [