Cut out list monad, and replace the use of the list monad with vector<T> for sequences of monads.
Rewrite sequence() and filter() not to make so many copies (O(n^2) in the sequence case!).