Add a new macro `@outline`, and use it in `@assert`.
Macro usage:
```julia
@boundscheck i > 1 && i <= len || @outline throw(BoundsError(x, i))
```
This commit applies the above to Assertions, e.g.:
```julia
julia> @macroexpand @assert x != x "x == x: $x"
:(if x != x
nothing
else
#= REPL[3]:36 =#
var"#17#outline"(x) = begin
$(Expr(:meta, :noinline))
#= REPL[3]:36 =#
(throw)((AssertionError)(((Main).Base.inferencebarrier((Main).Base.string))("x == x: $(x)")))
end
#= REPL[3]:38 =#
var"#17#outline"(x)
end)
```
This can improve performance for fast code that uses assertions, e.g.:
Before:
```julia
julia> @btime Base.Sort.WithoutMissingVector($(Any[1]))[$1]
3.041 ns (0 allocations: 0 bytes)
1
```
After:
```julia
julia> @btime Base.Sort.WithoutMissingVector($(Any[1]))[$1]
2.250 ns (0 allocations: 0 bytes)
1
```
The number of instructions in that function according to `@code_native`
(on an aarch64 M2 MacBook) reduced from ~90 to ~40.