Only adding selection history when a commit is selected

Select a new commit will lead two events,
one is dis-select old commit,
the other one is select new commit.

IOW, no need to add selection history when the old commit is dis-selected.

Signed-off-by: Yue Lin Ho <b8732003@student.nsysu.edu.tw>
Re-write SelectionHistory::Add()

1. Go back to previous one(not current one) when go back the first time
2. Stay at the first selection if GoBack reaching the first one
3. Go back to some commit and click it, then discard the tail of selection history
   * Selection history: A -> B -> C -> D -> E
   * Go back and highlight C
   * Click C
   * D and E will be discard

Signed-off-by: Yue Lin Ho <b8732003@student.nsysu.edu.tw>
Only discarding tail of selection history if historical branch is really occurred

Example:
 * Selection history: A -> B -> C -> D -> E
 * Go back and highlight C
 * Click C
 * D and E will be kept, then
  (1) D and E will be discard when any commit(except C) is clicked
  (2) Navigating history again, and click a new highlight commit
      => history is still kept

Signed-off-by: Yue Lin Ho <b8732003@student.nsysu.edu.tw>
Use red text color to highlight history

Not good enough!
Because message don't change color
if commit is referenced by tag or branch.

Signed-off-by: Yue Lin Ho <b8732003@student.nsysu.edu.tw>