Transactions: Events and Garbage Collection

A transaction consists of an ordered list of zero or more of 
the following events:
	- the NEW event represents the creation of a new object.
	- the SET event represents the setting of an object property
	- the LISTADD event represents the linking of an object into another
	  object's list property.
	- the LISTRM event represents the removal of an object from another
	  object's list property.
	- DESTROY is a special kind of event that is indirectly created when
	  an object is fully unlinked from the object tree.

When a transaction is created, it contains no explicit DESTROY events.  The
CSCP "DESTROY" command merely creates all of the appropraite unlinks to 
remove an object from all of it's parents.

When a transaction is committed, a garbage collection algorithm is applied
to create DESTROY events for all objects that are about to be separated
from the object tree.  In addition, some event filtering occurs.

IF a DESTROY event exists for an object:
	- all NEW events associated with that object are removed
	- all SET events on properties of that object are removed
	- list LISTADD/LISTRM events of properties of that object are removed
	- a LISTRM event is created for every object in every list-property
	  of the object. (if the unlinked object is in turn DESTROYed, it's
	  LISTRM event gets filtered out as well).

Examples:

	Performing a DESTROY command on an object would create
	the following events:
		a DESTROY event for the destroyed object.
		DESTROY events for all additional objects removed from the obj tree.
		LISTRM events for all broken links caused by the removal of 
			the above set of objects.

