Split TrackMixin into User and Channel TrackMixins

- Lighter weight for users that do not care about one or the other
- If you want both, you can use AllTrackMixin
- Only one evil hax added

Other fixes:
- self.network.to_str -> self.network.str_type
- user_part doesn't raise
- WHOX logging format uses %s instead of %d so debug logging doesn't raise
Use properties instead of generators on channels/users
Make evil hax a lot less evil in BaseTrackMixin.
Ensure base method is called in UserTrackMixin.on_cmd_JOIN
Support NICK in User, Channel, and Both tracking.

This was way, way harder than it should have been.