Add support for struct, union; bugfixes; improvements

Add support for struct, union:
- structure and union types can be defined
- structure and union variables can be defined/declared, but not
initialized with =
- structure and union variables can be assigned to one another with =
and can be operands to the ternary/conditional operator ?:
- structure and union members can be accessed via . and ->
- structure and union variables can be passed to and returned from
functions only "by reference", but not by value
- "(unsigned)&((struct someTag*)0)->someMember" now evaluates to an
integer constant and thus makes the offsetof() macro possible to
implement

Bugfixes:
- casts to char shouldn't have resulted in immediate promotion to int,
the type is now fixed as the respective char type
- fixed incorrect dereference of pointers to arrays
- fixed incorrect handling of overflows in expressions defining array
dimensions
- added missing code in the huge memory model code generator

Improvements:
- slightly better code generation for pointer expressions