Cover art support

- [x] implement database scheme
- [x] search for embedded cover
- [x] search for cover in track directory
- [x] save covers in disk cache
- [x] search for covers in disk cache
- [x] minimal ui (display covers in lower left corner)
- [x] handle existing users
- [x] LRU cache
- [x] unit tests
- [x] md5 hash
> Calling the function twice just sounds weird. Since we have a timer now can we just go back to the first signal/queue model that passed the images around. It is much easier to understand and the code that follows from it is also easier to understand.

I totally agree!
The current implementation is awful, it brings some issues and I also was not happy with this because it requires some workaround which makes the code not so clear... I'll revert it...