Defining it in protocol.h may cause multiple definitions to appear across
the program and there are cases where they don't get collapsed to one.
DLLs on Windows are one such case. The _impl header is to be included in
files that add packet definitions to a protocol and nowhere else.