Unify context setting into `with-monad` macro

Now bind sets the context to the monadic value's iif the current context
is not a transformer context. Also, when the monadic value doesn't have
a context it's not set (for example, writer monad's values are Pair
instances); in this kind of monads the use of `with-monad` is mandatory.

@niwibe please tell me what you think, this differs from the approach we talked
about (having two separate `with` functions for monads and monad transformers).