effects: refactor `builtin_effects` (#46097)
Factor special builtin handlings into separated functions
(e.g. `getfield_effects`) so that we can refactor them more easily.
This also improves analysis accuracy a bit, e.g.
```julia
julia> Base.infer_effects((Bool,)) do c
obj = c ? Some{String}("foo") : Some{Symbol}(:bar)
return getfield(obj, :value)
end
(!c,+e,!n,+t,!s) # master
(+c,+e,!n,+t,+s) # this PR
```