New version of cyclic comparison

I have completely changed the logic for comparing cyclic objects. The first approach, decycling the objects before comparison, wasn't viable for some tricky cases.

For example:
``` javascript
var cyclic1 = {}, cyclic2 = {};
cyclic1.ref = cyclic1;
cyclic2.ref = cyclic1;
pass("equal objects even though only one object is cyclic", cyclic1, cyclic2);
```
That test didn't pass before, but should, because of `cyclic1.ref === cyclic2.ref`.

Now the cycle detection is made during the comparison. Besides the information which objects were already visited the new implementation stores the information which combinations of objects (including nested objects) were already compared. An already compared combination terminates the recursion.

I made a lot of comments for a better understanding of the logic. That's normally not a good style. But for the moment i hope it is ok.

I am also not really satisfied with the structure of the tests for the cyclic logic. They are hard to read. Maybe somebody has a good idea how we could improve them.

Further i would be delighted, if somebody adds some more tests. I am quite sure, that i haven't considered all cases.

Due to the fact, that the cycle detection takes time and therefore slows down the comparison, we should think about making  the cyclic comparison configurable. By default the comparison would be without cycle detection. You have to activate it in the test via `this.cycleDetection=true`, as for setting another timeout value.