load replaygain tags on mp4 style files
load tags when opening file so they are available when we try to read replaygain

provide a fallback file type to tagloader based on content

pass content type to DVDplayer for types that support tags, in order to set a fallback filetype
[vfs] remove win32 code from SmbFile.h/.cpp
[vfs] remove win32 code from SMBDirectory.cpp
renderer: add underlying support for 16bit textures on gles
renderer: move UploadYV12Texture to same location as in GLES renderer

Simplifies diffing
renderer: match GLES UploadYV12Texture structure with GL version
renderer: calculate source rect on upload GLES:EGL/CVRef/MediaCodec
[dxva] added dxva-hd renderer as alternative native dxva.
fixup! renderer: calculate source rect on upload GLES:EGL/CVRef/MediaCodec
renderer: factor out logic for upgrading GL format to 16bit
fixup! renderer: add underlying support for 16bit textures on gles
[info] CStdString -> std::string
[info] ToLower() an infobool expression prior to searching to save unnecessary caseless comparisons
[info] splits InfoSingle/Expression out from InfoBool.h
[info] Made CGUIInfoManager::Register() return a shared_ptr to the InfoBool object
rather than an index into its cache of such objects. All places where
those index integers were stored are changed to store shared_ptrs, and
CGUIInfoManager::GetBoolValue() now accepts them instead.

This permits the lifetime of a registered bool to persist across calls of
CGUIInfoManager::Clear(), if necessary.
[controls] GetVisibleCondition is only ever used to check if a visible condition exists, so replace with HasVisibleCondition
[info] use std::find_if() to find previous infobool
[info] ensure we clear the window's conditional includes and visible condition on unload
[info] Add selective caching of infobools in list items

As noted in a TODO comment attached to CGUIInfoManager::GetBoolValue, caching
of infobools (both expression and single bools) is disabled whenever a
CGUIListItem pointer is provided. This is true whenever visibility is
evaluated for a control which is part of a list item (which is responsible
for a large portion of the controls in many windows), which obviously hurts
cache efficiency. However, many of the bools (including the leaf nodes of
expression infobools) aren't actually dependent upon which list item they're
attached to.

This patch adds a flag to each InfoBool object to indicate whether its value
depends upon the list item; if this isn't set, then the cache is re-enabled
even if a CGUIListItem pointer is provided. The flag is calculated at parse
time because it's quite tricky to evaluate - it applies to bools in any of
the following categories:
* a statically definied boolean condition in the range LISTITEM_START to
  LISTITEM_END - for example, "ListItem.IsResumable"
* a (dynamically allocated) multi-info bool, that is to say, the result of a
  string or integer operation on a list item attribute - for example
  "substring(Listitem.mpaa,Rated R)"
* an expression that uses one or more of the above - for example
  "Window.IsVisible(Videos) + !ListItem.IsResumable"

I measured the effect while the Videos window of the default skin was open
(but idle) on a Raspberry Pi, and this reduced the CPU usage by 3.2% from
45.1% to 41.9%:

          Before          After
          Mean   StdDev   Mean   StdDev  Confidence  Change
IdleCPU%  45.1   1.2      41.9   0.5     100.0%      +7.7%