Basic single-threaded scheduler

This patch adds an incredibly basic implementation of a single-threaded
scheduler.  The fleet only creates a single execution context, and all
of the tasks in the fleet are run within that context, within the thread
that calls `flt_fleet_run`.  The implementation isn't really optimized
at all, but it will serve as a baseline to experiment with, and to
compare a future multi-threaded scheduler against.