Blocks provided to `with` are used as implementation.

It is confusing to have different behaviour depending on whether the
block has arguments or not, and there are better ways to do this.

This behaviour matches that of other message expectations.

Fixes #377.