Add explicit cleanUpBlock to EXPBlockDefinedMatcher.

Some matchers like `EXPMatchers+notify` are currently using `failureMessageForTo` and `failureMessageForNotTo`
to signify the end of the expectation and perform any clean up such as unregistering for notifications.
This prevents the matcher from being reused. By adding an explicit cleanUpBlock the matcher can safely do
whatever clean up it needs to do and know that it is not going to be used again from that point.
Add collection semantics

  NSArray *array = @[ @1, @2, @1, @3 ];
  expect(array).elements.to.equal(@1); //=> (1)=> expected: 1, got: 2, (3)=> expected: 1, got: 3

  NSSet *set = [NSSet setWithArray:array];
  expect(array).elements.to.equal(@1); //=> (element)=> expected: 1, got:2, (element)=> expected: 1, got: 3

* Reduce complexity of `applyMatcher:`