weak-object: Dispose() on self

Code comments include why this is being done. Really stupid.

Also included assert on AsyncWrap that makes sure that
persistent().IsEmpty().