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 think I'd rather see this use `uniq` simply to make it clear that that's all we care about here.

Also, the `uniq` call for `actual` (or the `Set.new(actual)` call, if we go that route) should be done outside of the `all?` block.  I believe `Set.new` and `uniq` are both `O(N)` operations and it would be good to avoid doing those operations in each loop iteration.