Make IProtocol's constructor protected

It's not hurting anything to be public, since it's noninstantiable.
But it also doesn't make any sense.