I had the `yield` in there so that `HaveReceived` could mutate `expectation` before messages were replayed. I think this was kind of hard to follow, but couldn't figure out a way to tease it apart.

When adding `description`, calling `expect` was raising an exception, making it impossible to build the expectation when the stub was set up incorrectly. This pushed me towards splitting up `build_expectation`, so that it just builds the expectation and doesn't replay the messages. I made `reply_received_message_on` public so that the matcher can control which parts of the process it wants in which methods. Because the method is split up, it doesn't need to yield anymore.