refactor sidebar to make it more OO

1. instead of re-populate sidebar everytime, we only refresh needed ones
2. improve performances when rendering stuffs
3. break the dependence between sidebar and tracklist, it's cleaner