util/UriUtil: uri_get_suffix() fails if name begins with dot

A file called ".jpg" is not a JPEG file with an empty name; it is
merely a hidden file.
doc/user: fix typo
tag/TagBuilder: rename Commit() to CommitNew()
tag/TagBuilder: overload Commit() returning a Tag object
DespotifyUtils: pass const ds_track reference
DespotifyUtils: return Tag, not pointer
playlist/pls: simplify error handler

Don't pass a GError** to g_key_file_get_X().  We don't need to dispose
something we didn't request in the first place.
playlist/pls: convert "while" loop to "for" loop
playlist/pls: make variables more local
playlist/pls: don't free stack buffer
valgrind.suppressions: add libsmbclient suppressions
decoder/faad: fix memory leak
Merge branch 'v0.18.x'
doc/user.xml: add alsa input section
SongSave: make variables more local
SongUpdate: move code to handle_lsinfo()

Don't create a temporary Song object in handle_lsinfo().  Instead,
print all tags while parsing the remote file.
test/DumpDatabase: fix nullptr dereference
DetachedSong: fork of struct Song

From now on, struct Song will be used by the database only, and
DetachedSong will be used by everybody else.  DetachedSong is easier
to use, but Song has lower overhead.
playlist/asx: make variables more local
playlist/{asx,rss,xspf}: use Expat instead of GLib to parse XML