Work around for GHC decodeFloat compiler bug.

See src/util.c for more of an explanation. Basically we use a C function
to convert from "float" to "double" and then use that whenever we
want to do this in Haskell-land.