rewritten the first 3 optimisation rules
added more optimisations but the GroupByKey split seems to work too well
added a generator to share node values in the graph and tested gbkSplit with it
better ScalaCheck generation of AST graphs
refactorings for the comp optimisation
finished the refactoring of the OptimisationSpec
created mscrs with input and output channels based on Kiama attribute grammars
added more properties the check the well-formedness of mscrs
updated to the latest kiama version
finished the building of mscrs (but some example still don't pass randomly)
fixed a circular attribute evaluation and set the MscrGraphSpec as sequential to avoid re-evaluation of some attributes
added an ascii graph library to better display node graphs
commented the MscrGraph trait
removed an unnecessary method
added mscrs for the "floating" nodes

And simplified a lot the code. 2 scalacheck properties exhibit counter-examples though
all examples passing now

+ some removal of unused methods
started the processing of computation nodes diagrams but hit a bug in the ascii-graph library
removed the unnecessary 'oks' with scalacheck properties
Fixed issue #113: taking the minimum and the maximum of a list

The issue was in the Persister class were the relationship between DComp nodes and their optimised version was not properly tracked.
More specifically, a DComp nodes were associated to its sinks and sinks to their optimised nodes. However in the case of materialised values
there were no sinks so when looking for the result for a particular DComp, we ended up getting the result for another one.

This whole issue indicates that we should find a better way to track the DComp <-> optimised nodes relationship.
added a test case for issue #127