[configure] Use the preprocessor to determine the target FPU on ARM.

This is needed for a number of reasons:

1. Runtime detection of the target FPU is very hostile towards
   cross-compiling. We'd previously only pick up an FPU if we're
   compiling directly on the target device.
2. The runtime detection logic would attempt to use FP instructions
   regardless of whether the toolchain is actually configured for
   it. That means we could end up detecting an and using an FPU
   when the entire system is actually soft float, i.e. P/Invoke
   blows up.
3. The previous detection logic is never what distro packagers
   want because one build server could just happen to have an FPU
   even though the package is being built for soft float (armel).
4. We previously invoked 'gcc' explicitly, which is of course wrong
   when a non-GCC compiler is being used, or the compiler has a
   completely different executable name.

We now check preprocessor definitions to detect the FPU in use. This
works with cross-compilation, respects the toolchain's configuration,
and works when non-GCC compilers are being used. It also means distro
packagers can eliminate some downstream patches they previously used
to sanitize the FPU detection logic.
Remove the #error for hard float on ARM.