Bug 1074732 - [Messages] Create a mixin to handle the select UI model

- Create a selection mixin and extend the methods into view modules.
- Unify the UI update into one method and adjust the update flow to change the selected data first, then update (visible) UI based on data.
I still prefer passing functions instead of method names. It especially achieves this goal:
* the function names do not need to be specific names => loose coupling

(I'm sure there is another reason but I can't think of it now)