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
Merge pull request #103 from EragonJ/refactor/sidebar

refactor sidebar to make it more OO