improve return type inference for `string` (#52806)
Packages like URIs.jl overload `joinpath` with methods that return
non-strings. This prevents good return type inference for `string` when
the types of its arguments are unknown. Even if this is a URIs.jl bug,
it makes sense to be defensive about this in the Julia implementation.
Also note that URIs.jl is widely-used, JuliaHub says it's got in excess
of a thousand (indirect) dependents.
So, IMO, this is a Julia bug that we should fix:
```julia-repl
julia> all(T -> T <: AbstractString, Base.return_types(string))
true
julia> import URIs
julia> all(T -> T <: AbstractString, Base.return_types(string))
false
```
Fixed by adding a `::String` type assertion in `base/libdl.jl`.