ActiveAE: delay creation of viz buffers until they are needed
Merge pull request #4878 from FernetMenta/xfade

ActiveAE: set stream volume to fading target if fading time is zero
Merge pull request #4610 from zipleen/fix-apache-date-listing

Add new apache date format for file listings in http sources
Merge pull request #4888 from FernetMenta/paplayer

paplayer: update xfade time before using it to set initial volume
Merge pull request #4765 from Memphiz/osxvdasetting

[osx] - handle the VDA HW Acceleration setting same as all others (inste...
Merge pull request #4881 from ace20022/json_fix

[Fix][JSON] Fix re-set locale after using yajl
[osx/settings] - make the fake fullscreen option only visible when running
on snowleopard - it leads to black screen on all later osx versions
[cximage] - fix big memory leak in raw image decoder - thx to smf007 for
finding that one
[log] remove 'Unknown nodetype' logs - they're not really useful for actioning on, and users assume it's something bad
More efficient infobool expression evaluator

Expession infobools are evaluated at runtime from one or more single infobools
and a combination of boolean NOT, AND and OR operators. Previously, parsing
produced a vector of operands (leaf nodes) and operators in postfix
(reverse-Polish) form, and evaluated all leaf nodes every time the expression
was evaluated. But this ignores the fact that in many cases, once one operand
of an AND or OR operation has been evaluated, there is no need to evaluate the
other operand because its value can have no effect on the ultimate result. It
is also worth noting that AND and OR operations are associative, meaning they
can be rearranged at runtime to better suit the selected skin.

This patch rewrites the expression parsing and evaluation code. Now the
internal repreentation is in the form of a tree where leaf nodes represent a
single infobool, and branch nodes represent either an AND or an OR operation
on two or more child nodes.

Expressions are rewritten at parse time into a form which favours the
formation of groups of associative nodes. These groups are then reordered at
evaluation time such that nodes whose value renders the evaluation of the
remainder of the group unnecessary tend to be evaluated first (these are
true nodes for OR subexpressions, or false nodes for AND subexpressions).
The end effect is to minimise the number of leaf nodes that need to be
evaluated in order to determine the value of the expression. The runtime
adaptability has the advantage of not being customised for any particular skin.

The modifications to the expression at parse time fall into two groups:
1) Moving logical NOTs so that they are only applied to leaf nodes.
   For example, rewriting ![A+B]|C as !A|!B|C allows reordering such that
   any of the three leaves can be evaluated first.
2) Combining adjacent AND or OR operations such that each path from the root
   to a leaf encounters a strictly alternating pattern of AND and OR
   operations. So [A|B]|[C|D+[[E|F]|G] becomes A|B|C|[D+[E|F|G]].

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 2.8% from
41.9% to 39.1%:

          Before          After
          Mean   StdDev   Mean   StdDev  Confidence  Change
IdleCPU%  41.9   0.5      39.1   0.9     100.0%      +7.0%
Merge pull request #4891 from Memphiz/fixcximageleak

[cximage] - fix big memory leak in raw image decoder - thx to smf007 for
[addons] switch GetExtList() to use a vector<string>
[builtins] fix RunScript to set argv to the filename of the script being run
[dbquery] switch m_parameter to vector<string> rather than vector<CStdString>
[textlayout] drop old workaround for splitting prior to utf8toW with bidi flipping now that we no longer do the flipping here
[stackdirectory] switch HasPaths to a vector<string> instead of vector<CStdString>
[texturecache] utilise CURL::GetOptions() rather than parsing ourselves
[info] don't bother parsing empty [] blocks
[addons] switch CGUIWindowAddonBrowser::SelectAddonID to a vector<string> instead of CStdStringArray
[util] switch CUtil::Command to vector<string> rather than CStdStringArray