Motivated by the new objc_direct attribute, this change aims to limit
metadata generation from Protocols that the programmer knows isn't
going to be used at runtime. This attribute simply causes the frontend
to not generate any protocol metadata entries (e.g. OBJC_CLASS_NAME,
_OBJC_$_PROTOCOL_INSTANCE_METHDOS, _OBJC_PROTOCOL, etc) for a protocol
marked with __attribute__((objc_direct)).
There are a few APIs used to retrieve a protocol at runtime.
@protocol(SomeProtocol) will now error out of the requested protocol
is marked with attribute. objc_getProtocol will returl NULL which
is consistent with the behavior of a non-existing protocol.