Make object destruction async so we can reduce churn when destroying interconnected object graphs.

Half of the work related to #1961