fix VC6 32bit floating point problem and version bump to v0.30

VC6 helpfully does comparions of float to double at a uniform 80 bits of precision,
which means that the logic trying to decide the right float format failed to work
properly.

Bulk88 did a bunch of detective work on this:

(08:52:19 AM) bulk88: in dump_nv, "    if ( f == nv || nv != nv ) {" the f, in asm, is a double, and its a double == double comparison
(08:52:26 AM) bulk88: which is almost always true
(09:00:10 AM) bulk88: this must be a compiler bug because it was "fixed" for 2002 (IDK) or 2003 (confirmed fixed)
(09:18:02 AM) bulk88: http://msdn.microsoft.com/en-us/library/aa984742(v=vs.71).aspx i will be trying this option tomorrow on VC 6, asm code is very different for vc 6 and vc 2003
(09:20:31 AM) bulk88: in vc 6, ST(0) FP Reg is loaded once, either in 2nv (and goes tghrough the call in the register), or from the NV body
(09:20:37 AM) bulk88: then its copied to another FP stack slot
(09:20:41 AM) bulk88: and a comparison is done
(09:20:51 AM) bulk88: it stays 64 bit/80 bit all the time
(09:21:25 AM) bulk88: in VC 2003, ST(0) is copied back to C stack as a float, then float load to a FP reg

Ultimately he determined we could workaround this behavior by either using /Op (via a pragma)
or by marking the variables volatile. We decided to go for volatile, for no specific reason.

Thanks a lot to Bulk88.