Copy existing RSSA IL to make room for multi-entry RSSA

Copy the RSSA IL so that the existing pipline can continue to run while
the multi-entry pipeline is being set up.  This commit will be reverted
when the new pipeline is set up.
Add multi-entry functions to the RSSA IL

The conversion process was similar to adding multi-entry functions to
the SSA and SSA2 ILs.

Most of the conversions were just generalizations of already iteratively
defined actions, such as running a function on all of the arguments of a
function or marking which blocks in a function are reachable by doing a
depth-first-traversal from the start.

Changes that stuck out:

- A new transfer, 'Bug', was added, to accommodate the construction of a
  fake block to dominate all of the entry blocks of a function.  To do
  this, the fake block needed some form of transfer.  I wanted to create
  as little fake data as possible, so I wanted to use a nullary
  constructor --- hence 'Bug'.  A similar thing could have been done
  with Kind, but Kind.t.Jump was already a nullary constructor and
  seemed to fit well enough.

- Rssa.Program.main has a new type: {func: Function.t, entry:
  FuncEntry.t}.  This type is different from the type for 'main' in SSA
  and SSA2.  The record type was chosen because there were many cases
  where accessors wanted both "main, the collection of blocks" and
  "main, the label to jump to".
  This access behavior was also in SSA and SSA2, to a lesser extent,
  where main is just a FuncEntry.t.  If accessors want "main, the
  collection of blocks", they have to do a linear search through all of
  the functions -- so SSA and SSA2 may have their 'main' converted to
  the type RSSA now uses.