[IPlayer] Add struct SPlayerAudioStreamInfo and GetAudioStreamInfo(int iStream, SPlayerAudioStreamInfo &info).
[Players/GUI/LegacyPlayer/JSON] Remove
    GetAudioStreamLanguage(int iStream, CStdString &strLanguage)
    GetChannels()
    GetAudioCodecName()
    GetAudioStreamName(int iStream, CStdString &strStreamName)
from all players and replace them with GetAudioStreamInfo(int iStream, SPlayerAudioStreamInfo &info).
[IPlayer] Add struct SPlayerSubtitleStreamInfo and GetSubtitleStreamInfo(int iStream, SPlayerSubtitleStreamInfo &info).

[Players/GUI/LegacyPlayer/JSON] Remove
     GetSubtitleLanguage(int iStream, CStdString &strStreamLang)
     GetSubtitleName(int iStream, CStdString &strStreamName)
from all players and replace the calls to them with calls to GetSubtitleStreamInfo(int iStream, SPlayerSubtitleStreamInfo &info).
[Players] Remove unused method GetSubtitleExtension(CStdString &strSubtitleExtension).
[IPlayer] Add struct SPlayerVideoStreamInfo and GetAudioStreamInfo(SPlayerVideoStreamInfo &info).

[Players/GUI] Remove
    GetVideoBitrate()
    GetVideoCodecName()
    GetVideoAspectRatio(float& fAR)
    GetVideoRect(CRect& SrcRect, CRect& DestRect)

from all players and replace the calls to them with calls to GetVideoStreamInfo(int iStream, SPlayerAudioStreamInfo &info).
added: = & != operator for CStreamDetails
fixed: The VideoThumbLoader didn't fetch streamdetails for items that didn't have a file id set in their infotag
fixed: Move storing of streamdetails from CApp::PlayFile() to the SaveFileState-job, where it already partially was (for DVD stuff).
This fixes a few issues:
- Races causing possible invalid streamdetails to be stored in the db;
- Stream details for current file were not stored when item was not in the db yet;
- Make sure whether the streamdetails in the db need updating by comparing them to fix previously invalid stored details;
- Also clarify the special case for DVD stuff.
fixed: We can only obtain the aspect & duration this way when the Process() thread is running (and UpdatePlayState() has been called for the first) and we're rendering else the CApp will race getting the streamdetails on player start and get 0 for ratio/duration
changed: When checking for eg. user thumbs just check whether it's either a folder or a video file
fixed: Instead of checking whether the item is video, check whether we're playing video else we may obtain invalid info due to racing