Jb/638 cache descendants

Beim Löschen eines `DagLink` sollte auch der Cache von `ancestor` und `descendant` gelöscht werden.

Die Methode `#descendants` liefert erst nach einem `#reload` das korrekte Ergebnis.

Alle Verwendungsstellen von `#descendants` wurden durch `#cached_descendants` ersetzt.

Die Methode `#cached_descendants` ist besser, weil sie intern ein `descendant_pages(true)` und `descendant_groups(true)` aufruft. Jede Klasse, die `is_structureable` ist, hat mindestens `Group` oder `Page` als `ancestor_class_name`.

Meine Konvention war bisher, dass es transparent ist, ob eine Methode einen Cache verwendet oder nicht. Lediglich die Cache-Methode selbst hat ein Duplikat. Das aber nur zum Zwecke der Qualitätssicherung. Von mir aus können wir auch gerne auf das neue Caching-Konzept umsteigen. Es spart viel Schreibarbeit. An dieser Stelle muss auf jeden  Fall eine Korrektur erfolgen, da die Methode `#descendants` ein falsches Ergebnis liefert.