fdlibm does bad things with aliasing pointers.

* Add a union type so we can extract the high and low words of a
  double float.
* Add enum so we can select the high or low word, independent of the
  endianness of the machine.
* __x86_64__ means LITTLE_ENDIAN.