We memoize matcher state based on the provided `actual` value in many places.  For example, for the `match_array`/`contain_exactly` matcher, the computation to find what the extra and missing items are is very non-trivial, so we memoize that state and then use it in both `matches?` and the failure messages.

This was discussed at length in rspec/rspec-expectations#515, where it came up that this memoization could cause problems when using a matcher in a composed matcher expression, since the matcher may be matched against multiple items.  The solution we came up with is rspec/rspec-expectations#518.