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 that comment still true?

See the next line.

> Otherwise it might be wise to completely remove the  #if 1  block.

I left it in for the moment as a clue if the problem recurs. See the next line.