ASM backend: Fix unnecessary MOV when preserving LONGINT regs across CALLs

LONGINT vregs use two registers, the main vreg for the low dword and an
auxiliary vreg for the high dword.

In hPreserveRegs() vregs associated with caller-saved registers are copied
to callee-saved registers before CALLs, via an emitMOV(). This is intended
to copy registers, not vregs. The difference is that in case of LONGINTs
which use two regs, only one may need to be copied, if the other already
is in a callee-saved register.

But hPreserveRegs() didn't handle this case, it just invoked emitMOV()
which then copied two registers when it was only intended to copy one.
Due to
	tr = *vr
the tr vreg had the same IRVREG->vaux field as the vr vreg,
thus emitMOV() would always generate a redundant MOV for it.

Now hPreserveRegs() will update the temporary vregs given to the emitMOV()
to prevent that from happening.
ASM backend: Move common declarations from x86/SSE emitters into new header
ASM backend vregDump(): Show x86 registers/var names/stack offsets
ASM backend: Improve hDump() for debugging
parser: "Reallow" all UDTs without STATIC member vars as var names

Regarding 771d55440fa9534d83d62a2bc0f023ef1b0ca94e, even though normally
class-like UDTs were already not allowed to be used as var names, it *was*
allowed in case it's a different namespace (see the new test cases).
This was broken since the addition of STATIC member variables and should
be fixed by this patch.