New transformation: SSA case-entries

This pass generates entry points for some matchrules of a case statement
in the beginning of a function.  If a matchrule is only determining the
constructor for a datatype, it is a candidate for having an entry point
directly to it.  If callers are know what constructor was used to make a
datatype then they are updated to start in the callee at the new entry
that was generated for the matchrule that they would have eventually
branched to anyways.  This way, we can avoid the branch in the callee
and the allocation in the caller.

There are some restrictions right now on the situations where the optimization
can be used.

1.  Only works for functions taking in a single argument, which must be a
    datatype.
2.  Only works when the argument is not used beyond the case statement.  A
    function like:

    fun foo (arg: 'a option):
        case arg of
            SOME _  => bar arg
        |   NONE    => ()

    This example is a bit unlikely to actually happen, but if a function has
    any logging functionality (for debugging, perhaps?) then it's likely that
    the argument will have to be used more than once.

    This rule was added as a quick measure to make sure that we don't generate
    control-flows where we need variables that are out of scope.  In the
    example above, we can't get away with not creating an "a' option" since
    it's needed for the call to bar.  A better approach (as noted in the code)
    would be to look at the dominator forest to determine if it's safe to omit
    the definition of the constructed datatype in new entries.
case-entries: entryInfo doesn't need an option type

When I initially wrote this pass, I though that it may be useful for
entryInfo to take in a 'Con.t option' type: if NONE was passed in then
the original 'FunctionEntry.t' would be returned.

The one callee of this function doesn't seem to need that behavior (the
callee knows the default entry already).  There doesn't seem to be
anything lost here by not using an option type.
Destroy all of the conInfo plists when destroying entryInfo

destroyEntryInfo now calls the destructors of all of the plists that
entryInfo maps to.