AST nodes are now attributed and have comonads

This commit breaks compilation. AST nodes need to include their bodies
rather than having them as proceeding elements in an array. This
branch uses the old string concatenation rather than escodegen so
master should be merged before fixing compile.js

do-notation is also broken. Needs some work on the grammar.

AST as an attributed comonad allows use to map over an AST and chuck
something like State onto each node. We can then sequence that to get
a State of the AST. Useful for attributing each node with a type
variable.

Will allow us to find nodes that need to have type-class dictionaries
and attribute them with the ones we lookup.