New diagnostic pass: Duplicate Entries

This new pass takes existing function entries and duplicates them, with
the goal of exercising the multi-entry function pipeline before
implementing an optimizing transformation.
SSA2 foreachVar: traverse blocks once, not for every entry

In the SSA2 Function.foreachVar function, I erroneously traversed every
block of the program for each function entry.  This was discovered by an
`fx` which only allowed variables to be passed in once (the `fx` in
question was set function generated by `Property.getSetOnce`).  Now each
variable definition will only be visited once.

Strangely, this mistake did not appear in SSA's foreachVar, even though
they should have (effectively) the same implementation.
Add all entry points to the same (function) class

The original attempt to add support for functions with multiple entry
points tried to set the class of the function for each entry point -- an
error since setFuncClass is a Property.getSetOnce.

The original intention was to map the function to the union of the
classes of the entry points, which is what this change does.  Now any
block reachable (via intra-function transfers) from any of the entry
points of a function will be part of that function's class.

Choosing a union, rather than simply the class of a random entry point,
is important because some entry points may never have control reach a
block that other entry points reach.  This is especially likely to
happen when multiple functions have been coalesced together into one
function earlier in the pipeline.