DSound: use DSound notifications to produce sound.

Pretty straightforward; IDirectSoundNotify lets you register for
notifications after a certain amount of sound has played, so use that
instead of depending on Update() notifications from the CPU thread.

Also, while I'm here, reduce the buffer size by a factor of 4; this seems
to reduce the latency, although the difference is sort of subtle.
JIT: unify JitAsm for JIT64 and JIT64IL.

Having a bunch of nearly identical code sitting around isn't a good idea,
so fix that. JITIL had a couple of extra entry points into the JIT main
loop, so adjust the code appropriately.

Also fixes Issue 7186.
Removes ZeroFrog's "optimized" memcpy and memcmp functions.

These were only compiled in on Windows and x86_32.
They provided "optimized" copies and compares based on blocksizes for the AMD Athlon and Duron CPU families.
The code was taken from something that AMD provides with a as-is license.
Just get rid of this crap.
Merge pull request #309 from magumagu/jit-unify-asm

JIT: unify JitAsm for JIT64 and JIT64IL.
Merge pull request #370 from Sonicadvance1/remove_specialized_memcmp

Removes ZeroFrog's "optimized" memcpy and memcmp functions.
Use accurate frsqrte in Interpreter.

The implementation of frsqrte exposed by this change isn't completely
correct; that will be fixed in a later commit.
Interpreter: make fres match hardware.

New table-based implementation written based on actual hardware behavior.
(hwtest coming soon).
JIT: JitBaseBlockCache::valid_block is now std::vector<bool>

This was previously a std::bitset, which resulted in generation of suboptimal code by VS2013 compiler.
See https://gist.github.com/kayru/753db9607d680e26194b
JIT: JitBaseBlockCache::InvalidateICache no longer memsets iCache memory to INVALID_BYTE.

This is redundant, since we reset the valid_block bits any way.
However, this was a source of a significant performance issues in some games.
In particular, Metal Gear Solid: Twin Snakes.
removed trailing whitespace
Merge pull request #396 from kayru/opt_icache_invalidation

JIT: Optimized iCache invalidation
Jit: get rid of incorrect implementations of fres and frsqrte.

The existing implementations produce answers which aren't consistent with
the hardware, and games care about correct floating point math.

These can be reimplemented at some point in the future, if someone cares
enough, but the general case is probably too much code to inline.

(I'm leaving the ARM implementations in place by request, even though they
suffer the same issues.)
Interpreter: refactor the rsqrte code, and use it for ps_rsqrte.
New frsqrte implementation; verified accurate.

This is similar to the old implementation, but it uses smaller tables, and
handles more edge cases correctly.  (hwtest coming soon.)
Jit: Use infinity and NaN from numeric_limits.

MSVC's implementation of INFINITY is unusable.
Interpreter: Code style fixes.
Fixes build if the build path has spaces in it.
Merge pull request #398 from Sonicadvance1/Fix-Spaced-Build-Path

Fixes build if the build path has spaces in it.
Merge pull request #256 from magumagu/dsound-notify

DSound: use DSound notifications to produce sound.
Merge pull request #390 from magumagu/fp-reciprocal

Add accurate implementations of frsqrte and fres