Additional features for the `contain` matcher

1. Support `contain(an_instance_of([MyClass class]))` and `contain(an_instance_of([MyClass class]).or_any_subclass())` to search for instances. This scratches an itch I've been feeling for a while, and that syntax seemed like a logical way to introduce it into the DSL. The implementation adds a comparator argument to the compare_contains family of helper functions, so there is very little duplication. In particular, the UIKit specializations integrate with this feature without needing any extra complexity.

2. The matcher previously threw an exception when used on a dictionary/map, instructing the user to use `contain_key` and `contain_value` instead, but those were seemingly never built. We decided to try building the feature with a modified syntax: `contain(element).as_a_key()` and `contain(element).as_a_value()`. The motivation for this inversion was that it seems to read more smoothly, especially used in conjunction with `an_instance_of`.

Feedback requested!