Make `with` return the last expression from its branch

Thanks @rwtolbert for the bug report

The code is cargo-culted from "if". Maybe we should factor it out somehow...