x86jit: More fpu optimizations

These gain 10-15 points in a few games I tested, which is only around 1%, but might be better on some architectures or games.

Specifically:
 * Implements fpu rounding conversions in jit other than cvt.w.s (used by some games, e.g. Kingdom Hearts.)
 * Fixes a few places where regs were stored to mem and then overwritten anyway, or otherwise unnecessarily.
 * Optimizes the case of loading a known immediate 0 into an fpu reg.
 * Small improvement to 3-ops of the form "add.s x, y, y" / "mul.s x, y, y".
 * Kills a couple minor MOVSS to self.  Maybe the emitter should nix that, even...

-[Unknown]
Well, I can expand the comment, but if you look at it closely the compares are `!=`.  ESI and EDI happen to be the only other regs we use for the regcache in 32-bit.

The logic of the func is:

If reg is not "EDX" (which would be usable), and is also not "ECX" (also usable)
Then return true; this reg is not usable (e.g. it is ESI or EDI.)
Otherwise, return false (it is either EDX or ECX -> DL, CL.)

I suppose the comment is saying a slightly different thing, but I think a comment "ECX and EDX are okay since they have 8-bit subregisters." would be fairly weak (it doesn't clarify why the check is needed.)

Nevertheless, I also think checking for `ESI`/`EDI` specifically would be bad, since that would weaken the logic in case we changed the regs of the regcache and introduced a reg that was not safe.

-[Unknown]