refactor(uv): move around uv implementation files (#2580)

This PR starts establishing a structure that will eventually become a
part of our API. This is a prerequisite for #2578 which removes the
versions.bzl file in favour of a more dynamic configuration of the
extension. We also remove the `defs.bzl` to establish a one symbol per
file convention.

Things that I wish we could change is `//python/uv:extensions.bzl` and
the fact that we have `extensions` in the load path. I think it cannot
be removed, because that may break the BCR test. On the other hand,
maybe we could remove it and do an alpha release to verify this
assumption.

Work towards #1975
diff --git a/python/uv/uv_toolchain.bzl b/python/uv/uv_toolchain.bzl
new file mode 100644
index 0000000..a4b466c
--- /dev/null
+++ b/python/uv/uv_toolchain.bzl
@@ -0,0 +1,22 @@
+# Copyright 2025 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""The `uv_toolchain` rule.
+
+EXPERIMENTAL: This is experimental and may be removed without notice
+"""
+
+load("//python/uv/private:uv_toolchain.bzl", _uv_toolchain = "uv_toolchain")
+
+uv_toolchain = _uv_toolchain