More work on the Recordings page for the internal server
Workaround for a bug in the guide grid when a schedule change is made without first navigating forward/back in time. I intended re-factoring all this so the 'fix' isn't necessary.
H264Parser: Only enter the "state changed" state if we have seen a SPS.

Fixes #11882
May help or solve #11886
Don't timeout the signalmonitor until all hope is lost.
Re-enable display of tuning status in LiveTV after [9b22460f5]
Following [080ef223c] don't segfault if curRecording is NULL.
Move image thumbnail generation to the backend

This is an imperfect implementation and doesn't fix the other issues
around thumbnail generation. It is however a step in the right direction.
In MythImage::Load() don't treat a failed image load as successful which might mean caching a NULL image
Shorten the <title> of the Internal webserver
MythZoneMinder: fix the monitor function popup on the console screen

The popup was only allowing the first monitor to be changed.
Extended the DVR service's RemoveRecorded to support forced deletion and 'allow re-record'
Update recordings page to how recording status, add ability to delete recordings, various tweaks
Add support for loading season, episode and total episodes (as obtained from guide data) for recordings.

Values from guide data are stored in recordedprogram table (inherited from
program table), these are only used if those provided by the user or
metadata lookup scripts in the recorded table are missing.
Updated watched icon, a slight improvement
Services API: Always include the chanID in a Program object

Even if the associated channel no longer exists, the chanid is one
half of the unique identifier needed to allow other related service
methods to be used, including deletion of a recording, editing of the
recording schedule or retrieval of further program detail or the
preview image.
Services API: Fix 'reverse' sorting in Dvr::GetRecordedList()

Problem spotted by Jonatan Lindblad
MythEverywhere: Add support for switching recgroups on the recordings page. Note, there is no password support as it doesn't currently exist in the services API.
Replace a number of tabs with the equivalent spaces
Squeeze the menu down, only gives us a few extra pixels for content, but it all counts.
Remove some stray references to the ImageThumbGenThread from the frontend which caused a segfault.