More specific protocol fake handling of optional protocol methods

Implements more specific handling of optional protocol methods:

- Nice fakes will respond to optional protocol methods by default (as they already did)
- Non-nice fakes will not respond to optional protocol methods until they are stubbed, at which point they will respond to optional protocol method selectors.

This should help in test driving code which will interact with protocol implementations which may or may not implement optional methods.  This is especially helpful in framework/SDK development.