This patch changes the implementaion of copyObject()
basically.
It maintains the list of (old,new) pairs which I call 
copyContext during copyObject() operations.

The essentail implementaion is moved from copyObject()
to copyObjectEx() which takes a pointer to copyContext 
as its second parameter.
copyObjectEx() looks up copyContext before copying given 
objects. If given objects already exist in copyContext,
copyObjectEx() doesn't create new nodes and directly 
returns objects already created.
We should maintain copyContext immediately after new 
nodes are created. To achive this,my patch uses 
makeNodeWithContext Macro instead of makeNode macro.

Now copyObject() copies the relation among objects 
correctly. Unnatural code below was changed to use 
Node_Copy() to copy member nodes.

	[ CopyPlanFields() ]
	newnode->subPlan = SS_pull_subplan(newnode->qual);
			|
			V
	Node_Copy(from, newnode, subPlan, copycontext);
	[ _copyAgg() ]
	newnode->aggs = get_agg_tlist_references(newnode);
			|
			V
	Node_Copy(from, newnode, aggs, copycontext);
	[ CopyPathFields() ]
	newnode->parent = from->parent;
			|
			V
	Node_Copy(from, newnode, parent, copycontext);

Current implementation could be taken by calling 
copyObject2(..,false) or calling copyObject() after 
setting global option to false. 
