Add execWriterT

Generally, I'm in favour of using the most general type signatures we can. A lot of this was ported from Haskell, I think, so it can definitely be refined with our new hierarchy.