[ new ] Representing Cyclic Structures

Musings based off of Ghani et al.

* CyclicList draws from the ST monad architecture and exploits rank
  2 polymorphism to guarantee that one uses *at most* once the CRec
  constructor thus giving us a canonical representation of cyclic
  lists.
  /!\ (Of course!) This does not mean that we identify bisimilar
  lists: `1 : fix X. 2 : X` is not considered equal to its 1-step
  unfolding `1 : 2 : fix X. 2 : X`.

  Unfortunately defining map requires unfolding the cycle which makes
  it pretty useless.

* CyclicListBinder implements the solution with a notion of binder
  described in the paper except that it guarantees that there is at
  most one binder. Here the material artefacts (CRec and crucially
  CVar) let us detect the boundaries of the cycle which make it
  possible to define map / fold having to unfold it.
  One can recover a fold function with a signature identical to the
  one of Pervasives' foldr.