m_config: cosmetics: make code less verbose
m_config: don't allow aliasing with string options

Minor simplification. String options are now not allowed to use the
same variable/field anymore. (Also affects other "dynamic" options
which require memory allocation.)
m_config: slightly simplify dynamic option initialization

We can assume memcpy is enough, because the source should be from
static data. (It wouldn't work if the data could contain pointers
back into itself.)
m_config: refactor initialization, reduce amount of malloc'ed strings

Allocate strings only if needed (when we have to prefix sub-options).
Prepare for storing m_config_options in an array instead of a list.
m_config: store m_config_options in an array instead of a list

Might reduce memory overhead, and is also less annoying.

Since pointers to m_config_options are kept around, this assumes
they're added only during initialization. Otherwise you'd get
dangling pointers.
m_config: minor simplification

I think in this case, having a separate function is confusing.
m_config: don't require dragging along parent in initialization

Instead, track the opstruct explicitly. It turns out we don't need the
parent at all. Also, add something rudimentary to track the default
values.
options: fix bogus entry

This didn't make sense and caused issues with the following commit: if
it's an option with a data pointer, it should be writable.
m_config: refactor option defaults handling

Keep track of the default values directly, instead of creating a new
instance of the option struct just to get the defaults.

Also get rid of the special handling of m_obj_desc.init_options.
Instead, handle it purely by the option parser. Originally, I wanted to
handle --vo=opengl-hq and --vo=direct3d_shaders with this (by making
them aliases to the real VOs with a different preset), but since --vo
=opengl-hq=help prints the wrong values (as consequence of the
simplification), I'm not doing that, and instead use something
different.