Refactors both the channel and user message views to isolate typing state which
prevents excessive re-rendering of large message lists on every new character
typed. Also consolidates typing view code of both lists into the new
TextMessageField and related sub views.