jsonrpc: optimize handling of properties requested by the client

Up until now FillDetails, which contains a loop to go through all
the properties requested by the client in a request has been called
at least twice (once for the CFileItem and once for the CFooInfoTag)
for every media item matching the client's request. With n items
and m properties this resulted in n * 2 * m loops which can result
in longer response times. By removing the already matched properties
from the list of requested properties we get down to n * m loops.
Especially for "expensive" properties like "thumbnail" and "fanart"
which require additional SQL queries avoiding doing the same work
twice which can have a huge impact.
In addition moving the logic to retrieve any requested properties
directly from the serialization of the media item instead of first
checking and handling any special cases results in additional
speed-up by not having to do the extra string comparisons and map-
lookups required for the special cases.
Merge pull request #1581 from Montellese/jsonrpc_optimisations

jsonrpc: optimize handling of properties requested by the client
Confluence: add extra PVR buttons to support pause and seek
These buttons are only enabled when the current PVR backend supports pause and seek for the current playing stream
pvr: extend the PVR API to allow pause and seek for LiveTV and recordings when the backend supports it
- Add CanPauseStream and CanSeekStream functions enable/disable pause and seek for the current playing stream
- Add PauseStream function to notify the backend that XBMC paused playback
pvr: add the PauseStream, CanPauseStream and CanSeekStream functions to the PVRClient(s) classes
dvdplayer: add support for pause and seek of LiveTV and recordings
This functionality is only enabled when the PVR backend reports that it is supported
pvr: enable pause and seek when the PVR backend supports it for the current playing stream
added timer conflict support
[pvr] added TriggerEpgUpdate to the PVR interface, so an add-on can force an EPG update for a channel
[pvr] fixed invalid param name and doxy
[pvr] added/update doxy for PVR add-on callbacks + cosmetics
[pvr] added ADDON_STATUS_PERMANENT_FAILURE
Merge branch 'pvrapi_1_5_0'. closes #1504. closes #1577
[pvr] bump darwin/depends/xbmc-pvr-addons
fix CGUIWindow::HasID for window instances with unique id (fixes #13390)
Merge branch 'master' into master-dev

* master:
  fix CGUIWindow::HasID for window instances with unique id (fixes #13390)
  [pvr] bump darwin/depends/xbmc-pvr-addons
  [pvr] added ADDON_STATUS_PERMANENT_FAILURE
  [pvr] added/update doxy for PVR add-on callbacks + cosmetics
  [pvr] fixed invalid param name and doxy
  [pvr] added TriggerEpgUpdate to the PVR interface, so an add-on can force an EPG update for a channel
  added timer conflict support
  pvr: enable pause and seek when the PVR backend supports it for the current playing stream
  dvdplayer: add support for pause and seek of LiveTV and recordings This functionality is only enabled when the PVR backend reports that it is supported
  pvr: add the PauseStream, CanPauseStream and CanSeekStream functions to the PVRClient(s) classes
  pvr: extend the PVR API to allow pause and seek for LiveTV and recordings when the backend supports it - Add CanPauseStream and CanSeekStream functions enable/disable pause and seek for the current playing stream - Add PauseStream function to notify the backend that XBMC paused playback
  Confluence: add extra PVR buttons to support pause and seek These buttons are only enabled when the current PVR backend supports pause and seek for the current playing stream
  jsonrpc: optimize handling of properties requested by the client