Split up ErrorKind::ProtocolViolation
"something on the Tor network violated a Tor protocol" and "something local violated a protocol" are totally different situations.
tor_error::ErrorKinds should encode information about the likely source of the problem and appropriate remedies.