Support for-comprehensions for DBI transactions

This allows for the following DSL which should make working with multiple DAOs
inside a transaction simpler:

     for { handle <- dbi.transaction
           dao1   <- handle.attachable[Dao1]
           ...
           daoN   <- handle.attachable[DaoN] } yield {

          dao1.some_function()
          ...
          daoN.some_other_function()
     }