sched: use standard yield to begin task switching

Rather than implementing restore_full_task() to emulate a full processor
context restore when starting the first task, simply make a call to
task_switch() to yield to the scheduler.

The task switch service call handler detects that this is the first
call, and sets task switching enabled.

On ARMv7-M, this initial service call is made while the MSP is active,
rather than the PSP.  The SVC handler detects this, and passes the
correct register set to svc_handler(), and fixes up the LR to allow
exception return to the PSP, once a user task is set.

Change-Id: Ifc4c1f8eecc512ae34d68108099acbcf6e3e6aa0
armv7m: support ARMv7-M without floating point extensions

Support building with HAVE_FPU=n, thus disabling support for hardware
floating point.  Floating point context will not be saved or restored.

Attempts to execute floating point instructions will result in a usage
fault.

Note that while support for FP-extensions can be disabled, F4OS
(particularly, the math library), is dependent upon floating point
operations.  If GCC is configured to build without FPU support (in the
chip CFLAGS), then libgcc must be linked in to provide software floating
point operations.

Change-Id: I38a432e64e1391ec13254f3adad4a3f6917c4525
sched: eliminate yield logic duplication

The logic to save the current task and switch to another is duplicated
in several locations throughout the scheduler.  Send all of these
duplications through svc_task_switch().

Tangentially, sched_svc_yield() is no longer necessary, as it is
equivalent to svc_task_switch(NULL).  Eliminate it entirely.

Change-Id: Ide160ba2cd3106c21d74c604e7006e0b2f1aeb45
armv7m: sched: ensure stack alignment on context creation

AAPCS (Procedure Call Standard for the ARM Architecture) requires that
the SP be double-word (8-byte) aligned at a public interface.  Entry to
the first task function is a public interface, so the SP must be
aligned.

When creating task context, force the stack pointer to an 8-byte aligned
address.  The actual context creation instructions will add an even
number of words to the stack, ensuring that the SP is still aligned at
the top of the context.  The FPU context will add an addition empty word
to ensure alignment.

Change-Id: I85a4fcf0dd7952f3dde857c806e12bdbcee21f0b
math: use float constants for float routines

In anticipation of the option to build without short doubles, ensure all
floating point constants are explicitly floats in the float version of
various math functions.

This will prevent implicit promotions to double when -fshort-double is not
used.

Change-Id: Iabd27a1f5f49a0f8573a6dd26c7a0f1f8083f63a
config: conditionally build with FPU/short double support

Use CONFIG_HAVE_FPU and (the new) CONFIG_SHORT_DOUBLE to determine
whether or not to build with those options, for Cortex-M4F.  If either
is disable, libgcc in linked in to provide floating point arithmetic
routines.

Additionally, drop the double promotion warnings.  Some promotions (such
as in variadic functions), are unavoidable when building without short
doubles.

Change-Id: I05d13cc470dd9a8876907913bf9f07c59956aea8