[metal] Initial bring up of Metal HAL driver (1/n) (#3045)

This commit starts a Metal HAL driver. It registers the Metal HAL
driver and implements the following functionalities:

* All hal::Driver APIs
* hal::Device APIs for creating queues/buffers/semaphores
  and waiting on semaphores
* All hal::CommandQueue APIs
* All hal::Semaphore APIs
* hal::CommandBuffer APIs for lifetime

All other APIs will return unimplemented error for now.

hal/cts/ tests are enhanced to cover hal::Driver APIs and
more semaphore wait APIs. Existing hal/cts/ tests are all passing,
except allocator_test, which is not yet implemented at the moment.
diff --git a/docs/get_started/getting_started_linux_vulkan.md b/docs/get_started/getting_started_linux_vulkan.md
index 5a0fd7f..8ccf6c1 100644
--- a/docs/get_started/getting_started_linux_vulkan.md
+++ b/docs/get_started/getting_started_linux_vulkan.md
@@ -58,16 +58,16 @@
 HAL, which includes checking for supported layers and extensions.
 
 Run the
-[device creation test](https://github.com/google/iree/blob/main/iree/hal/cts/device_creation_test.cc):
+[driver test](https://github.com/google/iree/blob/main/iree/hal/cts/driver_test.cc):
 
 ```shell
 # -- CMake --
 $ export VK_LOADER_DEBUG=all
-$ cmake --build build/ --target iree_hal_cts_device_creation_test
-$ ./build/iree/hal/cts/iree_hal_cts_device_creation_test
+$ cmake --build build/ --target iree_hal_cts_driver_test
+$ ./build/iree/hal/cts/iree_hal_cts_driver_test
 
 # -- Bazel --
-$ bazel test iree/hal/cts:device_creation_test --test_env=VK_LOADER_DEBUG=all --test_output=all
+$ bazel test iree/hal/cts:driver_test --test_env=VK_LOADER_DEBUG=all --test_output=all
 ```
 
 If these tests pass, you can skip down to the next section.
diff --git a/docs/get_started/getting_started_macos_bazel.md b/docs/get_started/getting_started_macos_bazel.md
index 3fc3dcb..1dce426 100644
--- a/docs/get_started/getting_started_macos_bazel.md
+++ b/docs/get_started/getting_started_macos_bazel.md
@@ -126,9 +126,11 @@
 ### Further Reading
 
 *   For an introduction to IREE's project structure and developer tools, see
-    [Developer Overview](../developing_iree/developer_overview.md) <!-- TODO:
+    [Developer Overview](../developing_iree/developer_overview.md).
+*   To understand how IREE implements HAL over Metal, see
+    [Metal HAL Driver](../design_docs/metal_hal_driver.md).
+<!-- TODO:
     Link to macOS versions of these guides once they are developed.
-*   To target GPUs using Vulkan, see
-    [Getting Started on Linux with Vulkan](getting_started_linux_vulkan.md)
 *   To use IREE's Python bindings, see
-    [Getting Started with Python](getting_started_python.md) -->
+    [Getting Started with Python](getting_started_python.md)
+-->
diff --git a/docs/get_started/getting_started_macos_cmake.md b/docs/get_started/getting_started_macos_cmake.md
index 7b916cd..b71284a 100644
--- a/docs/get_started/getting_started_macos_cmake.md
+++ b/docs/get_started/getting_started_macos_cmake.md
@@ -110,9 +110,11 @@
 ### Further Reading
 
 *   For an introduction to IREE's project structure and developer tools, see
-    [Developer Overview](../developing_iree/developer_overview.md) <!-- TODO:
+    [Developer Overview](../developing_iree/developer_overview.md).
+*   To understand how IREE implements HAL over Metal, see
+    [Metal HAL Driver](../design_docs/metal_hal_driver.md).
+<!-- TODO:
     Link to macOS versions of these guides once they are developed.
-*   To target GPUs using Vulkan, see
-    [Getting Started on Linux with Vulkan](getting_started_linux_vulkan.md)
 *   To use IREE's Python bindings, see
-    [Getting Started with Python](getting_started_python.md) -->
+    [Getting Started with Python](getting_started_python.md)
+-->
diff --git a/docs/get_started/getting_started_windows_vulkan.md b/docs/get_started/getting_started_windows_vulkan.md
index e263052..dcee4a1 100644
--- a/docs/get_started/getting_started_windows_vulkan.md
+++ b/docs/get_started/getting_started_windows_vulkan.md
@@ -58,16 +58,16 @@
 HAL, which includes checking for supported layers and extensions.
 
 Run the
-[device creation test](https://github.com/google/iree/blob/main/iree/hal/cts/device_creation_test.cc):
+[driver test](https://github.com/google/iree/blob/main/iree/hal/cts/driver_test.cc):
 
 ```powershell
 # -- CMake --
 > set VK_LOADER_DEBUG=all
-> cmake --build build\ --target iree_hal_cts_device_creation_test
-> .\build\iree\hal\cts\iree_hal_cts_device_creation_test.exe
+> cmake --build build\ --target iree_hal_cts_driver_test
+> .\build\iree\hal\cts\iree_hal_cts_driver_test.exe
 
 # -- Bazel --
-> bazel test iree/hal/cts:device_creation_test --test_env=VK_LOADER_DEBUG=all --test_output=all
+> bazel test iree/hal/cts:driver_test --test_env=VK_LOADER_DEBUG=all --test_output=all
 ```
 
 If these tests pass, you can skip down to the next section.