The best generic way to avoid cycles is a feedback approach:

* Detect cycles of a run
* Append cycle list to calltree configuration
* Rerun calltree
* Start up kcachegrind, and start again as long as there are cycles


Calltree config Format
======================

Example:

Group {
 Func1
 Func2
 Func3
 Func4
}

Group {
 Func2
 Func3
}


The latter function group redefines/overwrites the first.
I.e. if a function appears later in the file in another group,
it switches to this group. This is to allow for KCachegrind
to append refined groups.

This happens e.g. with the following call chain (note that we only
have false cycles!) :

 Func0 -> Func1 -> Func2 -> Func3
 Func0 -> Func3 -> Func4 -> Func1
 Func0 -> Func1 -> Func3 -> Func2

We find that Func1/2/3/4 are in a cycle, so we give above
group definition 1. With 1st group definition, we get:

 Func0 -> Func1'1 -> Func2'1 -> Func3'1
 Func0 -> Func3'3 -> Func4'3 -> Func1'3
 Func0 -> Func1'1 -> Func3'1 -> Func2'1

We still have a cycle Func2'1/3'1. So we add the 2nd group.
Now we get:

 Func0 -> Func1'1 -> Func2'2'1 -> Func3'2'1
 Func0 -> Func3'3 -> Func4'4'3 -> Func1'4'3
 Func0 -> Func1'1 -> Func3'3'1 -> Func2'3'1

No cycles any more!
