So the CryptMessage is no longer a descendant of the base Message class used by other messages. The reasoning here, it that CryptMessage is now the only type of message that should be sent over the wire. Therefore the CryptMessage is basically a routing instruction (Circuit Key) and obviously an encryption wrapper. Therefore the only thing a crypt message reveals is what circuit a message goes on which is needed for mixnet routing. Everything else is hidden from intermediary routers. The ends or a circuit can determine how to decipher the message, and process the contents accordingly.
Anyway this is a pretty good structure for now. It may get re-factored again while user messages get added. Who knows.?