Add `invokelatest` barrier to `string(...)` in `@assert` (#55739)
This change protects `@assert` from invalidations to `Base.string(...)`
by adding an `invokelatest` barrier.
A common source of invalidations right now is `print(io,
join(args...))`. The problem is:
1. Inference concludes that `join(::Any...)` returns
`Union{String,AnnotatedString}`
2. The `print` call is union-split to `String` and `AnnotatedString`
3. This code is now invalidated when StyledStrings defines `print(io,
::AnnotatedString)`
The invalidation chain for `@assert` is similar: ` @assert 1 == 1` calls
into `string(::Expr)` which calls into `print(io, join(args::Any...))`.
Unfortunately that leads to the invalidation of almost all `@assert`s
without an explicit error message
Similar to
https://github.com/JuliaLang/julia/pull/55583#issuecomment-2308969806