db/upnp/Directory: join all CDATA nodes for tag values

Expat can call CharacterData() multiple times if the CDATA contains
entity references.  We need to collect all of them in one large
string.
db/upnp/Directory: replace std::vector with a simple enum

Reduce bloat.
db/upnp/Util: "emplace" items into the list

Reduce overhead.
db/upnp/Device: emplace/move the UPnPService into the vector

Reduce overhead.
db/upnp/Directory: "emplace" items into the vector
db/upnp/Device: remove unused UPnPService attributes
db/upnp/Device: replace std::vector with a std::string pointer
Main: glue_mapper_init() returns true if GetUserMusicDir() fails

Not a fatal error.  Fixes assertion failure.
db/upnp/Device: clear the "value" pointer on unknown element

Avoid appending to an obsolete string object.
db/upnp/Util: use string::back(), string::front()
db/upnp/Util: handle absolute URI paths properly in caturl()

Fixes problems with some UPnP servers.
db/upnp: require an empty input capability set
db/upnp/Util: pass char* to csvToStrings()
db/upnp: obtain char* from ixmlwrap::getFirstElementValue()

Fixes crash when there's no SearchCaps element.
db/upnp: remove special case for "*"

Passing this to csvToStrings() will do the same.
db/upnp: inline ContentDirectoryService::readDirSlice()
db/upnp: pass unsigned integers to readDirSlice()
db/upnp: use ParseUnsigned() instead of atoi()
db/upnp: break when count==0

Make this non-fatal.  Just stop reading more objects.
db/upnp: free responses manually