All protocol classes have now been duplicated in order to minimize the
use of pydantic validation
The "pure" classes are named what the previous validated classes were,
now each transport has its transport name prefixed on the class.
For example before we had Heartbeat, now we have Heartbeat and
JsonHeartbeat
This new architecture allows us to reduce the number of useless backend
validation steps created when copying and processing data, reducing CPU
stress by roughly 10-20% in real world testing