A class for "liftable" data structures. Conceptually
an extension of MonadTrans to allow deep lifting,
but lifting need not be done between monads only. Eg lifting
between Applicatives is allowed.
For instances where m and n have 'return'/'pure' defined,
these instances must satisfy
lift (return x) == return x.