Rework Node story fixers in terms of forest and trees

This commit generalises the API we have seen for Ngrams and
NgramsElement to Ngrams and NgramsRepoElement, making it suitable for
the NodeStory manipulations.

Furthermore, we use zippers to efficiently traverse forests.

This paves the way for a more disciplined way of handling forests of
ngrams.
4 jobs for adinapoli/issue-342 in 25 minutes and 13 seconds (queued for 42 minutes and 34 seconds)
Status Job ID Name Coverage
  Cabal
passed #18812
cabal

00:22:26

 
  Stack
failed #18813
stack

00:02:47

 
  Bench
skipped #18814
allowed to fail manual
bench
 
  Test
skipped #18815
test
 
Name Stage Failure
failed
stack Stack
       
Some different approaches to resolving some or all of this:

* Recommended action: try adding the following to your extra-deps in
/builds/gargantext/haskell-gargantext/stack.yaml (project-level configuration):

- list-zipper-0.0.12@sha256:f8e19cded3124d64fefde66923e8ad86fe93f9be64fcf45ece19da043527e3d2,2487
Cleaning up project directory and file based variables
ERROR: Job failed: exit code 1