initial version to support internal pointers

this allows almost all internal reference loops to be serializable