Correct SSA update / phi insertion requires us to separately track the
value at the end of a block, i.e. after a user-provided definition, and
at the beginning, i.e. incoming values from predecessors (if any).
This change aligns the behavior of SSAUpdaterBulk with that of
SSAUpdater to avoid risk of confusion.
SSAUpdaterBulk is a separate implementation that isn't used for much at
all and seems to not have seen much testing. Its interface can sometimes
be convenient (which is why I tried to use it) and the commit of its initial
introduction claims a performance benefit to using dominator trees in
the bulk case, so it seems worth fixing this implementation.