Transfer ownership of function-blocks at assignment; their execution is deferred until the function is called, rather than after the function definition.  Removes the ugly change_id safety check mechanism; it wasn't worth the effort to implement it correctly.
Prevent a subtle but dangerous cleanup ambiguity: Block owns a Scope, which is the parentScope of any children (e.g. NewInit) that will modify the scope.  If the Block is destroyed, its Scope will be destroyed *before* the Block's (inherited from Node) destructor destroys its children, leaving NewInit's destructor to try and revert the changes it made to its parentScope -- but that scope is already gone.  We do want children such as NewInit to do that cleanup if the Block itself is not being destroyed.  This is resolved by allowing Block to clear out all the parentScope pointers held by its Statement children during its destructor.
Add typeof statement-builtin to parser.
Fix Makefile to use g++ -Wall -pedantic.  Fix codebase to deal with the aftermath...
Remove last spurious trailing ;.  Thanks -pedantic!
typeof statement: use a TypeSpec instead of an Expression so we get non-evaluation for free
Functions determine their correct type now; Node's initChild() is called at appropriate times.