Implements more specific handling of optional protocol methods.

- nice fakes respond to optional protocol method selectors
- strict fakes require optional methods to be stubbed or they don't
  respond to their selector