Added whenM, untilM, and forever monadic combinators

I seem to have included a spurious blank line in Monad, and a "merge branch" commit for xuwei_k's unrelated change to Free.  LMK if you want me to sort this out first.