After duplicating entries, make the callers use the new entries

Another step in exercising the multi-entry pipeline, this pass has been
modified so that callers of the duplicated functions will exercise the
new entry points.

The next step is to have callers pick at random from a list of
replacement entry points, so that both entry points will be exercised
(by different callers).
Don't rename the start block of the entry being duplicated

The default SSA pipeline has been modified to duplicate function entries
before and after all of the other SSA passes.  This way, we see how the
other passes behave with multiple entry points while making sure that
other passes down the pipeline will have plenty of functions with
multiple entry points to work with.

When duplicateEntries ran before and after the shrinker, the shrinker
would notice that for nullary entry points (notably, main), the extra
blocks didn't need to be added to forward the arguments so they were
reduced to one block that all of the duplicated function entries would
use.

The original implementation of duplicateEntries replaced the start block
of the function it was duplicating.  Because of this, when duplicating
the entries again after the shrinker ran, the start block for the
duplicate entry point had already been removed from the function (and we
had no idea what it had been re-named to).  As a result, the second
pair of duplicated entry points would jump to their entry block, then
immediately jump to an undefined label.

This was fixed by not re-naming the original start block --- only
changing its arguments.  This way, we can safely duplicate entries, even
if they all jump to the same block.