Improved accuracy of null analysis

When leaving a block, remove variables declared in that block.
This improves the accuracy of GetVariableStateBefore/AfterStatement (correctly detects when a variable does not exist in a scope), makes the state have fewer variables in general (which should make it a bit faster since cloning states takes time) and prevents some unnecessary revising of nodes (which also improves speed).