fix Issue 12855 - Shadow register assignments for spilling can conflict

This fixes an ugly bug, took me a long time to track it down.

The fix is to prevent shadow registers to be spilled to other shadow registers. It also now favors assigning shadow registers to themselves when enregistering.

This fix is blocking https://github.com/D-Programming-Language/dmd/pull/3620
Is this supposed to avoid assigning registers over-cross (see [here](https://github.com/WalterBright/dmd/blob/fix12855/src/backend/cod3.c#L3489))?
This measure is quite coarse, it should be "don't assign register parameter to another register parameter that is enregistered in the function". So when a parameter is passed in a register but moved to the stack you could reuse that register. It's not easily possible though to know this before the whole register assignment is done, so I'm fine with this change.