functions, scope, compound statements, etc

See the README for all the changes.

I think I fixed a couple bugs in existing code with this commit as well
but I can't remember.  I'm going to try to do more frequent, smaller
commits with more discrete features.  I think it'll be easier now that
I've got functions and scoping rules which required some thinking and
data structure changes.

I need to rewrite all the tests (I've added a
couple but haven't updated the old ones that are now broken).  I also
discovered that I'll definitely have to compare with both gcc and tcc.

Argument evaluation order is unspecified in the standard and gcc
seems to do it in reverse order but tcc seems to do it in order
the same as me.