Fix concurrency issue in lifetime manager.

Some unit tests failed during TearDown when trying to access a
virtual method for a partially destroyed object.  One thread was
in the process of removing a dependent object's LifetimeRef from
the parent LifetimeActor's dependency list. This was happening
via the destructor for the dependent object.  At the same time,
the main thread was in the process of propagating Delete from the
parent LifetimeActor to it's dependents.

Fix is to perform propagation of delete from the LifetimeManager
task rather than doing it inline from the Delete method.  Notice
that this splits up delete propagation into multiple steps.  An
actor propagates delete to it's immediate children.  If a child
has a LifetimeActor it gets added to the LifetimeManager queue.
Further propagation happens when the child LifetimeActor itself
is processed from the queue.

This change broke some tests which expected that the delete is
propagated inline.  As an example, if the MemebershipManager is
stopped and has requests to process, and a routing instance is
deleted, the tables for the instance don't get marked deleted
as BgpServer::IsReadyForDeletion doesn't let the LifetimeManager
task process the queue.

Fixed this issue by adding a MayDestroy method to LifetimeManager.
Instead of not processing the LifetimeManager queue at all, we
now process the first item on the queue, invoking Shutdown and
PropagateDelete if needed, and then put the LifetimeActor back on
the queue if MayDestroy returns false.

Defined a BgpLifetimeManager class whose MayDestroy method calls
BgpServer::IsReadyForDeletion.

Change-Id: I6b5688f5362fbf5591c84c78f56e4a682cb95587
Merge "Fix concurrency issue in lifetime manager."