Fix === and objectid of object with undef inline immutable field (#37557)
An undef field should always be treated equal to another undef field of the same type
since there's no other way for the user to tell the difference between these.
These could previously cause inconsistent comparison results or crashes.
* Mark these types as `haspadding` so that they'll not hit the `memcmp` fast path.
* Make sure `jl_egal` and `jl_object_id_` doesn't read bits fields in undef inline immutable field
* Use `emit_getfield_knownidx` in `emit_bits_compare` so that the check can be done more easily
Handle union fields of the same type in `emit_f_isa` to avoid regression.
* Allow input to `emit_f_isa` to be NULL and lazily emit NULL check if necessary
(cherry picked from commit e84fec4d67945e50a31b8a15cc23e42c4e124a41)