Support indexing `Broadcasted` objects using `Integer`s (#56470)
This adds support for `IndexLinear` `eachindex`, as well as
bounds-checking and `getindex` for a `Broadcasted` with an `Integer`
index.
Instead of using the number of dimensions in `eachindex` to determine
whether to use `CartesianIndices`, we may use the `IndexStyle`. This
should not change anything currently, but this adds the possibility of
`nD` broadcasting using linear indexing if the `IndexStyle` of the
`Broadcasted` object is `IndexLinear`.
After this,
```julia
julia> bc = Broadcast.broadcasted(+, reshape(1:4, 2, 2), 1:2)
Base.Broadcast.Broadcasted(+, ([1 3; 2 4], 1:2))
julia> eachindex(bc)
CartesianIndices((2, 2))
julia> eachindex(IndexLinear(), bc)
Base.OneTo(4)
julia> [bc[I] for I in eachindex(IndexLinear(), bc)]
4-element Vector{Int64}:
2
4
4
6
julia> vec(collect(bc))
4-element Vector{Int64}:
2
4
4
6
```
This PR doesn't add true linear indexing support for `IndexCartesian`
`Broadcasted` objects. In such cases, an `Integer` index is converted to
a `CartesianIndex` before it is used in indexing.