refactoring xbmc_stream_utils.hpp completely in order to fix
a bunch of outstanding issues.

Instead of operating directly on the PVR_STREAM_PROPERTIES
struct and keeping track of the indexes with a map, we instead
only operate on a vector of streams and "convert" those to a
PVR_STREAM_PROPERTIES struct only when one is requested in
GetProperties().

Fixes at least the following:

- use proper copy/assignment constructors so that e.g. audio
stream language is correctly copied
- reliable sort streams in order to make the video appear
first. This was somehow broken in the old code which could
cause audio or video streams to go missing when switching
channels.
- look at both ID and codec when determining if two streams
are the same. Tvheadend doesn't use unique IDs like VDR so
the old approach was broken.
- hypothetical situations where the video stream would go
missing if the addon reported more than 20 other streams
before it.