draw_bmp: remove CONDITIONAL2 code

This was sometimes slower, sometimes slightly faster. Remove it.
mpcommon: add mp_rect type
draw_bmp: cosmetics, refactor

Mostly pedantic bikeshedding issues.

Move some code around, so that the sub_bitmap_to_mp_images() function
can be split into two parts. This is better than having a big function
with many input and outputs, of which only half are used in each code
path.

Also, try to make code simpler by using a mp_rect type.
draw_bmp, csputils: use function instead of macro
csputils: better support for integer color values
mp_image: use uint8_t instead of unsigned char for plane pointers

Purely cosmetic.
mp_image: add fields to pass colorspace down the filter chain

Note that this also adds a RGB colorspace for general symmetry. The
frontend (colormatrix property and options) and
mp_get_yuv2rgb_coeffs() don't support this.
screenshot, draw_bmp: use colorspace passed with mp_image

Remove the explicit struct mp_csp_details parameters from all related
functions, and use mp_image.colorspace/levels instead.
screenshot: let VOs pass colorspace information via mp_image

This removes the hack that screenshot_save() got the colorspace
information from the decoder. Instead, require the VOs to set the
colorspace information on the mp_images used to pass around the
screenshot data. This is more correct, as the image may have been
converted/modified in the video filter chain, although there's
nothing yet in the video filter chain which does this correctly.
screenshot: remove hack for passing anamorphic image size

With anamorphic video (display with non-1:1 PAR, e.g. DVD), the display
size was passed using the mp_image fields w/h, which was blatantly
incorrect. w/h are the normal image dimensions, while width/height are
the "uncropped" storage size (used internally by vf.c).

Add a display_w/h, and use that for the display size. Make all VOs that
can do screenshots use it.
image_writer: add dump_png() function as debugging helper
vo_opengl, vo_opengl_old: remove -wid/viewport special case

For reasons unknown to me, vo_gl had a special case for when the -wid
option (slave mode embedding) and -geometry was used. This adjusted the
viewport in a way different from normal operation. It's unknown what
this was needed for (if it's sane at all), but since no other VOs use
this special case, and since we broke slave mode compatibility anyway,
remove it.
vo_vdpau: remove unneeded assignment to vo_fs

This is already done by x11_common.c. Other X11 VOs don't touch the
vo_fs variable directly.
VO: remove code duplication for setting up mp_osd_res

vo_opengl, vo_vdpau, vo_direct3d had the code for setting up mp_osd_res
duplicated. Make things simpler by making calc_src_dst_rects() setup
the full mp_osd_res structure, instead of just "borders".

Also, rename that function to vo_get_src_dst_rects(), and make it use
mp_rect. Remove vo_rect, which was annoying because it contains
redundant members (width/height additional to right/bottom).

Add code to print the video rect etc. in verbose mode.

There should be no actual change how the video rects are calculated. The
only exception are the bottom/right subtitle margins, which are now
computed slightly differently, but that shouldn't matter.