Use visitor pattern to create conversation items

This branch builds on @grote's refactoring of the private message hierarchy to use the visitor pattern for creating conversation items in a type-safe way without instanceof ladders. I've done some leisurely QA and haven't found any bugs so far.