Make PurpleProtocolIM a proper interface
Move PurpleProtocolIM to a proper interface and it's own files
Update the protocols for the PurpleProtocolIM change
Testing Done:
Compiled, verified no new warnings, and tested with a few protocol plugins.
A bunch of the protocols have very weird/mixed syntax. I did what I could to keep it consistent but I'm sure I messed something up there, that said, since their all so inconsistent compared to everything else, I don't consider it a big deal which is why I didn't try to hard to fix it.
Reviewed at https://reviews.imfreedom.org/r/64/