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.