Some `getfield` related fixes in inference
* Use the field index passed in in `lift_leaves`
The caller has already done all the computation including bound checking.
The `field` computed in this function is also affecting all the following iterations
which is almost certainly wrong.
* Remove unnecessary type check on `field` in `lift_leaves` since it is always `Int`
* Move a branch disabling `return nothing` higher up
* Remove some duplicated calculation on field index in `getfield_elim_pass!`
* Fix `try_compute_fieldidx` to return `nothing` for non-`Int` `Integer` field index.
This can cause `getfield_nothrow` to return incorrect result.
It also gives the caller worse type info about the return value.
* Teach `getfield_nothrow` that `isbits` field cannot be undefined and getfield on such field cannot throw.
This is already handled in `isdefined_tfunc`.
* Fix a few wrong use of `isbits` in dead branches
----
Ref #26948 (fa02d34496eb2bed9a55e4f77cb135a6b4180edc)
Ref #27126 (9100329d189b3d2ac6d1e03bfc7431cbe8d18c00)