Do not require GTraversable for subterms

Instead, introduce a new class, Rec, which combines 'c' and GTraversable.

The idea and implementation are due to Sjoerd Visscher.
Change types of closed recursion combinators

* Simplify the constraints
* Allow the "kernel" to use Rec
Closed recursion combinators: require 'p c' rather than 'p (Rec c)'