artwork: move functions related to artwork filenames into sonata.artwork
artwork: dedent code
artwork: fix art cache loading/saving

The art cache is a dictionary which is simply dumped and loaded using eval()
(!), but the SongRecord object, used as a cache key was dumped as a complex
structure which couldn't be loaded back (something like "<SongRecord...>".
So, even if the cache was saved, it could never be loaded afterwards.

Now, the key is a simple tuple, which makes everything work.
artwork: split of artwork._library_artwork_update to remove entangled code

There's much less branching now, although it's still quite complex to
follow...
artwork: move artwork cache to a dedicated class
config: shortcut to access current music dir
artwork: add tests for artwork path manipulation functions

Sonata doesn't check as extensively for artwork file names now as before.
Instead, it just assumes the correct case is present. This reduce a bit
Sonata activity relatively to the filesystem.
artwork: simplify, reduce, test code related to artwork paths handling
artwork: fix artwork caching, artwork-related code cleanup

This is a merge from some refactoring I started a while to better
isolate the threading code from the artwork module. It's useful and
cleaner enough to get merged in master, as I don't know when I'm going
to finish the whole threading removal.

Conflicts:
	sonata/main.py
ui: keep the selected tab when hiding/showing using the tray icon