Gc fixes

@jodzga 

This contains previous tracevis changes that are under review in addition to changes to reduce problems with memory contention described below:

Previously each task had a reference to other tasks in its plan, causing
memory for all tasks to be held as long as a reference to one task was
strongly reachable. This change uses indirection to reduce the amount of
memory reachable: we uniquely identify each task in a plan and use this
for building relationships for trace purposes.

This change also turns off deep tracing by default. Now when a trace is
requested we get a shallow trace by default. If a plan is executed with
tracing enabled then we get the entire plan's trace. This reduces cost
when the trace is not necessary (should be the usual case). The pattern
that is emerging for tracing is that it can be enabled by a special
request parameter.