Expat: attributes come in name/value pairs (bug fix)

I wrongfully assumed that each array element is a name and a value
concatenated.
db/upnp: getprop() returns const char *

Return the return value, instead returning it in a reference
parameter.  Reduces bloat by reducing unnecessary std::string usage.
db/upnp/Object: use strictly-typed enums

At the same time, rename the enum types and the class attributes, and
add an "UNKNOWN" type/class.  The latter avoids the "-1" hack.
db/upnp/Directory: don't use std::map to parse upnp:class

Reduce excessive bloat.
db/upnp/Directory: move "res" tag handler to StartElement()

No need to handle this in EndElement() - in StartElement(), we already
have all we need.
db/upnp/Directory: make "attributes" a local variable

We only need it inside StartElement().  Reduces bloat.
db/upnp/Directory: eliminate struct StackEl, use std::string

Reduces bloat.
db/upnp: use nullptr-terminated array

Reduce bloat.
db/upnp/Directory: move "res" attributes to array

Reduce bloat.
db/upnp/Directory: eliminate the "attributes" std::map

Look up attributes in the "atts" array.  Reduce bloat.
db/upnp/Directory: don't log unknown items
db/upnp/Directory: simplify checkobjok()
db/upnp: remove unnecessary empty string checks from CharacterData()
db/upnp/Device: remove unused attribute "m_tabs"
db/upnp: remove unused method errAsString()
db/upnp: remove unused macro PLOGINF()
db/upnp: remove "upnplog" option

We have removed all libupnp logging calls, and we don't need to debug
libupnp.
db/upnp: remove unused method setMaxContentLength()
Stats: lazy initialization

Ask the DatabasePlugin for stats when the first client requests them,
not at startup.
UpdateGlue: move stats_invalidate() call to Instance::DatabaseModified()