mplayer, stream_tv: move variable initialization

It's not clear why that was done in mplayer's main function.
mplayer: move highly OS specific initialization code out of main()

The intention is to make the main() function smaller (which is at
about 1000 lines currently).

This commit also changes the order of some initializations, but that
should be safe.
mplayer: do not create X11 state in player frontend

This is about the vo_x11_init_state() call. It basically opens a X11
connection. It's called in the main() function once. It's not really
clear why this isn't done on VO creation instead. Maybe one reason was
that --no-fixed-vo used to be the default: when playing a new file, the
full VO state would be free'd and recreated. Keeping the X11 connection
possibly improved things, although the question is how. In summary,
there is no good reason to do this, and it only adds platform specific
details to the player frontend.

Do the X11 initialization in the respective VOs instead.
x11_common: remove some code duplication

This sin was committed in 2002.
sub: simplify code by always defining sub_cp
mplayer: move things out of main()

The main() function used to be way too big, to the point that it was
unreadable (> 1000 lines).

Move random parts out of the main into new functions.
mplayer: move file loading out of main()

The structure is now as follows:
- main():
    * basic initializations (e.g. init_libav() and more)
    * pre-parse command line (verbosity level, config file locations)
    * load config files (parse_cfgfiles())
    * parse command line, add files from the command line to playlist
      (m_config_parse_mp_command_line())
    * call:
        - handle_help_options():
            * check each help-related option
            * print help if requested
            * main() exits if help was requested
    * call function that works down the playlist:
        - play_files():
            * run idle loop (idle_loop()), until there are files in the
              playlist or an exit command was given (slave mode only)
            * actually load and play a file:
                - play_current_file():
                    * run all the dozens of functions to load the file
                      and initialize playback
                    * run a small loop that does normal playback, until
                      the file is done or a slave command terminates
                      playback
                      (each iteration, run_playloop() is called)
                    * uninitialize playback
            * determine next entry on the playlist to play
            * loop
    * call exit_player_with_rc() (there are many other places which
      use this function, though)
mplayer: fix output of audio/sub language in terminal output

The SH_COMMON lang field seems to be blatantly unreliable and is not
always set by demux_lavf (at least not with dvdnav:// ).

Also fix the same for the show_tracks_osd slave command.
command: make audio switching persistent across file switches

mp_property_audio switched the audio stream, but didn't store the newly
requested audio ID to MPOpts.audio_id, which is used by --aid. This
meant that the audio track would be reset when advancing to a new file.

Change that to make it consistent with subtitle selection. (Whether this
behavior is a good idea or not is a different question - maybe it's not
a good idea, because tracks are essentially random, and this will
disable default selection of tracks.)
demuxer: introduce a general stream struct

There are different C types for each stream type: sh_video for video,
sh_audio for audio, sh_sub for sub. There is no type that handles all
stream types in a generic way. Instead, there's a macro SH_COMMON, that
is used to define common fields for all 3 stream structs. Accessing
the common fields is hard if you want to be independent from the stream
type.

Introduce an actual generic stream struct (struct sh_stream), which is
supposed to unify all 3 stream types one day. Once all fields defined
by SH_COMMON have been moved into sh_stream, the transition is complete.

Move some fields into sh_stream, and rewrite osd_show_tracks to use
them.
options: fix forgotten --sound => --audio rename