Conversation optimizations

I think this worked out well. I made OnDataChangedListener have two methods: one for when a specific user's conversation changes and one for when all the data is reset. This kills two birds with one stone by negating the need for a dataReset boolean, and allowing the client to decide if the update applies to them or not.

I also snuck in a small change that makes sure you can see the latest messages when the keyboard pops up in ConversationActivity. Before it annoyingly hid them and made you rescroll back down.