Oh, and for reference, Forge doesn't even have to instantiate the class in order to get a ClassNotFoundException the way you have.
Simply by telling the JVM that your client sided packet handler exists is sufficient.
Because the JVM goes "I have to load this class, I don't know when--or indeed if at all--any given part of it will be executed, so I'm going to check that all of it is valid. To do that I need to make sure any additional classes it references are ones I can find, just in case I need to load them in the future. Oh what's this? I see a reference to EntityPlayerSP, I don't know what that is or where it find it. Crap."