sanitize getentries so it always returns a table with a type and an optional field name, or a list of entries representing a union.
changing behavior of struct cast and naming of unnamed fields.

if the field with offset N in a struct is unnamed, it will get the name _N. Before the first unnamed field would get name _0
an unnamed field with offset N used as a source in a struct cast will fill in the destination value at offset N. Before
it would initialize the first uninitialized field in the struct.

the combination of these two rules is significantly easier to keep track of, but still works as expected
when all fields are either named, or unnamed.