Add a scheduler module

Utility routines for running co-routine--based tasks.
Make Resource.create() a co-routine

At the moment, we will just run each co-routine to completion, but in
future we can use this to return control to the caller so that resources
may be created in parallel.
Add a TaskGroup task

A TaskGroup can monitor a collection of subtasks.
Use a TaskGroup to simplify autoscaling
Use scheduler for driving autoscaling task

For threads that drive autoscaling events, run them to completion using the
task scheduler, to abstract out the sleeping from the main code.

Change-Id: I9b21404a171d92d6edbc59d3099d3ee34f08e22d
Move WaitCondition polling to check_active()

Rather than poll in a loop inside handle_create(), use check_active() to
check the status of the WaitCondition.
Move Volume polling to check_active()

Rather than poll in a loop inside handle_create(), use check_active() to
check the status of the Volume.
Make volume attachment a co-routine
Make volume detatchment a co-routine
Move VolumeAttachment polling to check_active()
Add convenience method to get instance volumes
Handle volume attachments with co-routines

Don't sit in a loop when attaching instances, use a task that yields
control and allows other things to run at the same time.
Detach Volumes from an Instance in parallel

Use a TaskGroup to ensure that if there are multiple Volumes attached to
an Instance they are detached in parallel rather than serially.
Use a task to delete Instances
Remove eventlet dependency from unit tests

Unit tests should not need to know about eventlet. Instead of stubbing
eventlet.sleep(), stub out the TaskRunner._sleep() method in the scheduler.
Get rid of eventlet dependency in scheduler

If eventlet is active, it will have monkey-patched time.sleep() already.
The application code should not be bound to the presence of eventlet by
referencing it explicitly.