This should use `values_match?(actual_item, matcher)` rather than `matcher.matches?`.  That includes some extra internal flexibility for matching nested data structures and also takes care of cloning the matchers before using them in order to avoid issues with memoization.