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`.

Das gefällt mir eigentlich nicht so gut, da wir dann wieder mischen, was einen Cache verwendet und was nicht. Wenn Du die Methode `<<` verwendest, weißt Du nicht, dass intern bereits ein Cache verwendet wird.

Ich mache mir nochmal Gedanken zu diesem Thema. Ein paar Ideen habe ich schon. Ich melde mich diesbezüglich per Trello.