Use workflow errors for tool name resolution (#22320)
When `uv tool` resolves a bare URL or local path to a package name,
`resolve_names` also builds the HTTP client. Its return type is limited
to `uv_requirements::Error`, so a client setup failure is wrapped in
`std::io::Error` and passed along as a requirement failure.
Return `ToolError`, which already has a dedicated `ClientBuild` variant.
This removes the artificial I/O wrapper and lets the command distinguish
client setup failures from errors in the requirements themselves.