struct_assignment: save a lot more information
This was not saving nested struct members like foo->bar-baz. Also unions
members were not saved.
The disadvantage of this change is that it means smatch uses more memory
and is slower. I have worked pretty hard to cut down on memory usage to
prepare for this change, and I've been running this code myself for a
while and it basically works. In the old code we saved memory but by
ignoring stuff randomly, the right way is to ignore stuff in a deliberate
way if necessary.
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>