Change the way we do soft float to a fallback mechanism.

MONO_ARCH_SOFT_FLOAT previously meant that a back end was using
soft float unconditionally. It's now MONO_ARCH_SOFT_FLOAT_FALLBACK
and actually indicates whether the back end has a soft float
fallback compiled in - not necessarily that it's used.

A new port function has been added:

    gboolean mono_arch_is_soft_float (void) MONO_INTERNAL;

This function is what actually tells Mini whether the back end is
going to use soft float. If MONO_ARCH_SOFT_FLOAT_FALLBACK is not
defined, it must return FALSE. Otherwise, it should return TRUE or
FALSE depending on whether the back end determines that the hardware
supports floating point. Once mono_arch_init () has been called,
the value returned from this function must be constant for the rest
of the VM's lifetime.

For example, on ARM, we now try to detect VFP via /proc/self/auxv
or /proc/cpuinfo and, if found, return FALSE from the function. This
only applies to Linux and Android as iOS always has VFP.

It's important to note that if the runtime is built with the 'softfp'
or 'hard' ABIs, the soft float fallback is not compiled in, as the
runtime is assumed to only be executed on VFP-capable systems.

Finally, the ARM feature detection code has been moved from the
mono_arch_cpu_optimizations () function to mono_arch_init () so that
FPU detection/initialization is done in one place.