Factor out chat view controller

I noticed that the chatview class was getting really bloated and
contained a lot of logic that wasn't strictly about displaying its
view, so I opted to break this out into a controller.

Still a few bugs here, but I think most of them have been forced out
at this point. Thinking about implementing a provider pattern for a
lot of dependencies (and dependency injection) so that this will be
a lot easier to test in isolation.