tighter generation of blocks/returns

previously, jumps and returns were recorded monotonically during
fixpoint iteration but not discarded when a block was analyzed
again. this made things look like there were more cf-edges than
actually existed and lead to more blocks being emitted as
functions than necessary (vs inlined).