Add tracking of instance ghosts

With some virt drivers, deletion of an instance does not immediately
release the resources formerly used by that instance; the virt layer
instead must perform some scrubbing for security purposes, which
may take some time.  This change adds the concept of a "ghost" to
nova-compute: a "ghost" is an object which holds the resources
formerly held by the deleted instance until a given expiration time.
A ghost may be returned by the virt driver's destroy() method, in
place of the default None return value.

Ghosts are not persisted to the database; they represent a best-
effort mechanism to prevent scheduling an instance to a host which
may not yet have made the vacated resources available.  Should a
ghost be lost, and a compute node fail to create an instance as a
consequence, the normal rescheduling mechanism should suffice to
ensure the instance is created.

Partially implements blueprint ghosts.

TODO:

* Test suite adjustments as needed

Change-Id: I1f9d8e1bfa47a4aab99cfe76567779e841c37a8f