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.
Ya I left the same question in the previous not granted patch but forget to move to here. I agreed that we should replace DOM element with other structure, and I think it would be similar to: 
```
{
  id : id ,
  isDraft: boolean // For thread/draft case
}
```
It seems no need to fetch the real data into the selected map, but this map would be different than allItems(array contains id or data, maybe we can provide the in memory data directly from mixin), do you think it's fine?