Add liftBaseOpDiscard utility function

`liftBaseOpDiscard` lifts HOFs whose arguments are value-discarding functions, discarding effects produced by the argument function, except for effects in the base monad.

This makes sense for applications like concurrent servers, where the argument function represents a conversation with a client, and client threads are isolated except for effects in IO. For example, `runServer` from the `websockets` package.