Fix non-constant struct initializers

Here's a patch to fix non-constant struct initializers. If this seems
a bit too big, I can split it into a few pieces, but I figured I would
post the whole thing since I have it. The only thing that's missing,
as far as I know, is support for initializers with elided braces; I
don't think we really have a good solution for that yet, though.

The patch is pretty straightforward; I don't think I need to say
anything more about it.

-Eli

codegennonconstantinit.txt (8.38 KB)