C backend: Add mechanism to emit static assertions
C backend: Emit static assertions to verify struct sizes
C backend: Fix nested anonymous struct emitting issue

The old code failed to handle cases where multiple fields had a common
anonymous parent higher up the hierarchy of nested anonymous
structs/unions, the new code is hopefully doing it properly now.

This caused lots of the test cases in tests/dim/union-init.bas to be
miscompiled, which I didn't notice when writing that test case. However the
tests/dim/union-init.bas:nested86() test case caused a crash while trying
run the test suite on 64bit, and then the new struct size checks, which are
now emitted by -gen gcc since the previous commit, revealed that many other
test cases were affected.