Cleanup orphaned objects when they no longer appear in the persistence graph

We should only store objects which appear in the graph, which means we need some way to handle orphaned objects. We have some options regarding how aggressively we try and do this cleanup, but at minimum we probably should ensure that orphaned objects at not restored/rehydrated when we wake up a graph.

Maybe there's a more straight forward way to show this, but here's an example of the problem.

(use-modules (goblins)
             (goblins vat)
             (goblins actor-lib cell)
             (goblins persistence-store memory))

(define local-object-refr-aurie-id
  (@ (goblins core) local-object-refr-aurie-id))

(define store (make-memory-store))
(define soon-to-be-orphaned-aurie-id #f)
(define-values (init-vat cell)
  (spawn-persistent-vat
   cell-env
   (lambda ()
     ;; Spawn the cell.
     (define soon-to-be-orphaned (spawn ^cell 'orphan))
     ;; Store it's aurie ID so we can easily look for it in the restored vat...
     (set! soon-to-be-orphaned-aurie-id
           (local-object-refr-aurie-id soon-to-be-orphaned))
     ;; Finally spawn the root with the orphaned cell inside
     (spawn ^cell soon-to-be-orphaned))
   store
   #:name "initial vat"))

;; Replace the inner (soon-to-be-orphaned) cell with another, so that
;; soon-to-be-orphaned is now actually just orphaned.
(with-vat init-vat
  ($ cell (spawn ^cell 'new)))

;; Now respawn the vat...
(define-values (restored-vat cell*)
  (spawn-persistent-vat
   cell-env
   (lambda () (error "Should be restoring"))
   store
   #:name "restored vat"))

;; Finally lookup the object within restored vat by its
;; aurie ID we saved earlier
(define ^aurie-vat-refr-resolver
  (@@ (goblins vat) ^aurie-vat-refr-resolver))
(define restored-orphan-refr
  (with-vat restored-vat
    (let ((resolver (spawn ^aurie-vat-refr-resolver restored-vat)))
      ($ resolver soon-to-be-orphaned-aurie-id))))