I still think we should migrate the virtual machine to using some form of garbage collection or perhaps the new std::shared_ptr<> interface. The readability of the current code and the maintainability is eroded by the presence of ref bumping since in some cases in relatively straighforward code reasoning about these details are not always clear.
My thoughts on the garbage collector-
add a mark field to the relevant values and use this to support a mark and sweep collector.
remove the all the ref count fields.
use the vm stack and the otable/callout/living hash tables as the root set (and other things that are stored internally by the driver).