build: Check for C99-compatible compiler
cleanup: Get rid of useless struct

The internal representation of an floats is currently a single union
wrapped in a struct. This changeset removes the redundant struct.
tests: Don't assume that isinf() returns the sign of the inf

The man pages on Linux specify that isinf() returns the sign of the
infinity. This isn't what the C99 standard mandates, so there are
compilers that only returns 1 or 0. We obviously want to test the sign
of the infinity resulting from a conversion. This changeset introduces
a small helper function in the relevant test case that always has the
same behavior as the GNU implementation of isinf().