ligd: First class generic functions, part 1

Using generic functions as first class values is difficult to do in Scala,
we cannot write them as functions, but need to create a trait, otherwise
we cannot work properly with the existential type.

Initial idea would be to translate
	forall u. Rep u -> u -> t
to
	(Rep[u] -> u -> t) forSome { type u }
but the compiler fails when using this function, complaining that the
type of arguments do not match u. If we only had one parameter, we could
write stuff like:
	(u forSome {type u } -> t)
which the compiler accepts, but we need the rep, so we are a bit lost.