Fix lfs/stfs-based memcpy for SNaNs

We can't use CVTSS2SD or CVTSD2SS because then FTZ/DAZ would round
denormals to zero. The x87 FPU doesn't even support that, so we use old
x87 instructions (FLD/FSTP) in order to convert between single and
double floats. Unfortunately, SNaNs are either automatically converted to QNaNs (by
setting the most significant bit of the fraction to 1) or trigger an
invalid operation exception, in which case we would have to handle those
cases anyhow (neiter fun nor portable). So I opted to manually reset the
QNaN bit to its original value.

TODO: fix other fld/fstp occurrences