Use `cooperative_thread_hopper` to colorize the path
Use `cooperative_thread_hopper` to colorize the path

Because of the excessive side-effects (queries against the view)
`_colorize_dots` must run on the UI thread but then we can't block
for too long or we get freezing.

Using the `cooperative_thread_hopper` utilitiy we cut the unit of work
in time slices (of 17ms).

- We always paint the dot where the cursor is immediately because it
  indicates the active line.

- We also paint before "hopping" because usually we have enough time
  to compute and paint the visible viewport.  Thus we can give the
  illusion the viewport is painted and ready.

- We process the `uow` going round-about.  Usually only one path is
  extremly long, while others are short.  If we for example naively
  just follow a long path down, we miss the opportunity of painting
  the dots above quickly.  We go round-about in circles thus computing
  and painting the viewport as fast as possible.

- Although we could compute in the background, we rather abort because
  the computation is heavy, and interleaving computations of different
  paths still lead to a stutter UI.

divmain/GitSavvy,divmain/GitSavvy,divmain/GitSavvy