scrobbler: allow to scrobble again

This was like completely broken and probably untested since the move to
Python 3.
Deal with file names and paths using strings instead of bytes

GLib.filename_from_utf8() returns bytes which is not really expected by
Python's own path manipulation functions and is not practical actually
anyway.
This fixes some issues with songs containing non-ASCII characters, tested
using various locales.
doc: recommends PyGObject 3.7.4 or more

3.7.4 fixes the problem from #27. It only occurs if people have playlists
with non-ASCII characters, so most people are going to be safe with a earlier
release of PyGObject. This is the recommended version anyway.
doc: more informations for the PyGObject dependency
TreeSelection.unselect_all, not manual equivalent
Simplify VIEWS, add action-to-VIEW mapping
Refactor library_get_parent
Remove cruft associated with / and .. in library

The selected items in the library now are all valid targets for updating.

Also, the only way to browse to parent directly is with the shortcut. (You
can browse to it via breadcrumbs, but that uses a separate mechanism because
you could browse to any of the levels).
Refactor library_browse
library_browse should store the height of the view

Fixes a change from 7a33ea8 (part of the port to pygobject).
Remove leftover from '..' and '/'

This was previously used to avoid saving those special rows as the selection.
library_populate_toplevel_data only takes view

Also hits library_get_toplevel_cache, a companion.

It is simpler to pass just the view, as the views can't overlap for
toplevel data.
Convert bulk of library into classes

The views each get their own class off of the main class 'LibraryView'.

Also, a class is added, 'LibrarySearch'.  This class handles feeding data to
the views.

This is an initial conversion into classes.  Cleanup of these classes will
follow.
Replace NOTAG class props with file-wide const
Add alt arg in LibrarySearch.get_list_items

MpdHelper changed at 28593ba, to have the default 'alt' be None.  We must
specify if we want something else, as '' in this case.  This allows untagged
items to function correctly.
Remove unused strip_type var in get_search_items

Small leftover from ffc6b65c that's not needed.
Cleanup LibrarySearch.get_search_items

This also caught a missed migration of library_return_search_items.

There is a functional change in how get_search_items works, in that it now
accumulates the playtime, num_songs, and results over multiple searches it
finds in LibrarySearch.get_searches.

I expect this is how it was meant to behave since it got changed back in
813140c6.  The other similar functions in LibrarySearch, get_count and
get_list_items both follow this model.  But I could be wrong.  If so, it
should operate on searches[-1].
Cleanup LibrarySearch.get_list_items

Includes marking unused items from LibrarySearch.get_list_items as private
and making the method more pythonic.
Simplify base LibraryView.get_data_level
Cleanup LibraryView._get_data_songs