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.
There's back-to-back duplication here.  In addition, we can't count on all matchers having a `description` method as it is considered to be an optional part of the matcher protocol.  This issue has already been dealt with in the error generator:

https://github.com/rspec/rspec-mocks/blob/d6a89d3028963fbea1bfbdde0ce39bf15386d800/lib/rspec/mocks/error_generator.rb#L217-L221

...so maybe that can be extracted into something reusable?