Garbage collection

The tests here make sense but I would use an event emitter style to notify you when `gc` has occurred rather then trying to use `setTimeout` to wait for the right moment... this is fairly error prone and will make you sad (if we ever ran this on CI)