But I wonder why we would handle CellType differently and not turn that into an enumeration, too.
Certainly could. I left the CellType alone (both leaving it as lowercase and a string definition) because it's a sub-mapping and hence we don't have any precedent for those. On reflection I agree with you, an uppercase enum would be more consistent.
The P and N come from the Tor code, and I guess they stand for next and previous. We can also call them AppWard and ExitWard, like in AddedAppWar or TimeExitWard, if that makes it easier to understand.
I'm not sure what 'previous' and 'next' are in reference to, and AppWard and ExitWard aren't any more illuminating. That said, I'm not the target audience for these events so if you think any of those are good descriptions for the users of these events then go for it. :)