[ios64] - fixed offsets into the eventmem for arm64 - fixes bt keyboard cursor keys when compiled for arm64
Improved file buffering in CArchive.

CArchive already did some file buffering, but only on writes. Added the
equivalent code for reads. Also improved the write buffer case so that it
only ever issues sector-aligned writes (the read code does this from the
start). Shuffled various bits of code into the header file to squeeze a bit
more performance out of it.
[gui] auto height textboxes should take into account the cell height of the last row, which may be more than the lineheight for well-spaced fonts
[application] - remove m_bInBackground and its setter/getter and use
SetRenderGUI instead
AESinkPULSE: Initialize pause flag to be on safe side
Merge pull request #4691 from fritsch/pacork

AESinkPULSE: Initialize pause flag to be on safe side
[json] - fix jsonbuilder was not found when added to "PATH" from outside. Add the same approach like done in codegenerator.mk - fixes json generation when compiling from xcode
[airplay] - fix possible bad access as reported in http://issues.xbmc.org/main/issues/13
Merge pull request #4690 from jmarshallnz/auto_textbox_height_fix

[gui] auto height textboxes should take into account the cell height of last row
Merge pull request #4695 from Memphiz/badaccess

[airplay] - fix possible bad access as reported in
[airtunes] - phase out support for libshairport - its superseeded by libshairplay long enough on all platforms
Merge pull request #4248 from Memphiz/btcursorkeys64bit

[ios/arm64] - fix bt keyboard cursor keys when compiled for 64bit arm
settings: fix deserialization of list setting with empty default value
Merge pull request #4694 from Memphiz/fixjsongeneration

[json] - fix jsonbuilder was not found when added to "PATH" from outside...
Correct null check

Correct likely copy and paste mistake, and null check the correct
variable.

Fixes Coverity CID 1213840
Merge pull request #4234 from bavison/carchive_buffering

Improved file buffering in CArchive.
Merge pull request #4697 from Memphiz/phaseoutshairport

[airtunes] - phase out support for libshairport - its superseeded by lib...
Merge pull request #4693 from Memphiz/remove_background

[application] - remove m_bInBackground and its setter/getter and use
Merge pull request #4701 from cg110/CoverityFixes4

Fixes for the obvious bug from this weeks coverity scan.
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%