command: minor simplification
command: change what the metadata property returns

Change the type of the property from a string list (alternating
key/value entries) to a map. Using the client API, this will return
MPV_FORMAT_NODE_MAP, while Lua mp.get_property_native returns a
dictionary-like table.
command: allow changing filters before video chain initialization

Apparently this is more intuitive.

Somewhat tricky, because of the odd state after loading a file but
before initializing the VO.
encode_lavc: copy metadata to output file

Closes #684

Signed-off-by: wm4 <wm4@nowhere>

Includes some minor cosmetic changes additional to the original PR.
video: Add BT.2020-NCL colorspace and transfer function

Source: http://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.2020-0-201208-I!!PDF-E.pdf
video: Add support for non-BT.709 primaries

This add support for reading primary information from lavc, categorized
into BT.601-525, BT.601-625, BT.709 and BT.2020; and passes it on to the
vo. In vo_opengl, we always generate the 3dlut against the wider BT.2020
and transform our source into this colorspace in the shader.
options: Expose --primaries to the user
video: Support BT.2020 constant luminance system
video: Generate an accurate CMS matrix instead of hard-coding

This also avoids an extra matrix multiplication when using :srgb, making
that path both more efficient and also eliminating more hard-coded
values.

In addition, the previously hard-coded XYZ to RGB matrix will be
dynamically generated.