concrete functor and monad transformers

#39return of nested MaybeT takes exponential time

return of MaybeT m calls return of m twice (including once through lift), which leads to an exponential asymptotic complexity.

See description in http://stackoverflow.com/questions/43149878/why-do-nested-maybets-cause-exponential-allocation/43151568#43151568

The following would fix it, and is much simpler in other respects.

return = MaybeT . return . Just