Improve composability of collection argument matchers

* Makes array_including able to take matchers as part of its expected argument
* Makes array_including describe passed matchers so that descriptions compose correctly
* Makes hash_including describe passed matchers so that descriptions compose correctly.
I really dislike using a message expectation for a query method (like `description`).  IMO, message expectations are generally only appropriate for command methods and it's smell to use them in query method situations.

Consider, for example, that the implementation could call `description` but then accidentally discard it and not include it in the returned value (such as if you accidentally used `each` rather than `map`).  In contrast, if you define your matcher so that it returns a particular `description`, you can set an expectation on the return value of `array_including(...).description` and verify that it includes the description of your custom matcher and that it is all formatted properly.

Also, the `RSpec::Mocks::ArgumentMatchers::` bit is an implementation detail that I'd prefer this test not know about.  Consider also that end users are never going to define a custom matcher in that namespace.  Instead, I recommend defining a custom matcher that implements the rspec-expectations matcher protocol, as that's the normal way we encourage people to create custom matchers, so this spec would more closely mirror end-user usage, which is always a good thing.