Reduce the number of alternatives for 'size' expressions in rebinder.

This is actually a workaround to deal with programs like this:

    fun {int} main(*[int] a_0) =
      let {val_3} = 1 in
      let letwith_dst_4 = a_0 with [|0] <- val_3 in
      // c_1 aliases letwith_dst_4
      let {c_1} = letwith_dst_4 in
      let {x_2} = size(0, c_1) in
      {x_2}

In this case, 'size(0,c_1)' can alternatively be written as
'size(0,a_0)'.  Note that a_0 is consumed by the let-with.  The
rebinder, conservative machine that it is, will thus reason that the
size-binding must precede the let-with.  BUT, the binding of c_1 must
of course also precede the size-expression!  This creates a conflict.

The central issue, of course, is that we order bindings before
resolving alternative expressions.  Maybe we need to reconsider the
whole handling.
Remove renamer as a compiler pass.

It is now a type error to have name shadowing, so it will never make a
difference anyway.  Compiler passes that generate non-unique names can
run it on their own.