Tune the register allocator.

The main thing is in many cases to mark the src and dest of an
assignment as "preferring" each other, such that if one variable gets
assigned a particular physical register, try to assign it to the other
variable as well.

One useful extension of this is to mark that the same register can be
used even if the live ranges overlap.  For example, "a=[b+c]" gets
lowered to "t1=b;t2=c;a=[t1+t2]" such that t1 and t2 are guaranteed to
have a physical register even if b and c don't.  The problem is that
if b and c have physical registers and their live ranges continue
beyond this instruction, then t1 and t2 are guaranteed NOT to get the
same physical registers, which is completely wasteful.  To deal with
this, we can mark that t1 and b are allowed/encouraged to have the
same register even if their live ranges overlap.

This capability should be used with care, otherwise it may be possible
to suffer the lost update / lost swap problem.