vf: remove unnecessary indirection
manpage: fix typo
options: use m_config for options instead of m_struct

For some reason, both m_config and m_struct are somewhat similar, except
that m_config is much more powerful. m_config is used for VOs and some
other things, so to unify them. We plan to kick out m_struct and use
m_config for everything. (Unfortunately, m_config is also a bit more
bloated, so this commit isn't all that great, but it will allow to
reduce the option parser mess somewhat.)

This commit also switches all video filters to use the option macros.
One reason is that m_struct and m_config, even though they both use
m_option, store the offsets of the option fields differently (sigh...),
meaning the options defined for either are incompatible. It's easier to
switch everything in one go.

This commit will allow using the -vf option parser for other things,
like VOs and AOs.
m_config: improve option list output a bit

This is printed with --list-options or e.g. --vf=lavfi=help.

Note that in theory, the options should be able to print their own help,
and we shouldn't special case certain types (like m_option_type_choice
in the commit). But that is too hairy for now, so we don't do it.
m_option: fix memory leak on error path
options: add some features to video filter parser

This is in preparation of making VOs and AOs use the parser which
originally was for video filters only.

The --vo and --ao options have several very annoying features, which are
added here:
- They can skip unknown video outputs (might be useful if a config file
  is supposed to work on several systems, where not all VOs/AOs are
  available everywhere)
- The trailing "," in "-vo a,b," was significant, and meant that if "a"
  and "b" don't work, try the normal autoprobe order as fallback
- There were deprecated VO names (like "gl3" and "gl"), which have to be
  handled with the option parser
- Separating VO/VF names and options is different
  ("-vf foo=opts" vs. "-vo foo:opts")
- vo_opengl.c provides opengl-hq as opengl + preset options
options: use new code for parsing --vo

Nothing should change from user perspective.

mpv --vo=opengl:help now works.

Remove the vo_opengl inline help text. The new code can list option
names for you, but that's it. Refer to the manpage if you have trouble.
mplayer: simplify AO creation

The AO creation part was split into two separate parts (one calling
ao_create and one calling ao_init). This didn't really have good
reasons, and obfuscates how AO creation works. Put them together.
options: use new option code for --ao

This requires completely refactoring the AO creation code too.
ao_portaudio: use new option API

This basically serves as example. All other AOs should be ported as
well.
ao_pcm: use new option API
ao_alsa: use new option API (changes syntax)

This changes how device names are handled. Before this commit, device
names were mangled in strange ways to avoid clashing with the option
parser syntax. "." was replaced with ",", and "=" with ":" (the user had
to do the inverse to get the correct device name).

The "new" option parser has multiple ways to escape option strings, so
we don't need this confusing hack anymore.

Add an explicit note to the manpage as well.
options: hide encoding AO/VO in help output

These can't be used manually. Encoding is enabled with -o instead, and
the encoding AO/VO is selected using internal mechanisms.
ao_pulse: use new option API

Untested, but should be fine.
ao_openal: use new option API
ao_sdl: use new option API
ao_rsound: use new option API

Untested. I don't even know if this compiles. I have no clue what rsound
even is.
options: remove --mixer and --mixer-channel, turn them into alsa/oss subopts

These two options were supported by ALSA and OSS only. Further, their
values were specific to the respective audio systems, so it doesn't make
sense to keep them as top-level options.
ao_oss: switch to new option API
ao_jack: use new option API