app: keep docks on the monitor in gimp_ui_configurer_move_docks_to_window()

and don't move them to the very left and right of the screen, which might
be on different monitors. Also clean up the function.
app: make sure the GUI appears on the same monitor as the splash

Manually figure the monitor where the pointer is and pass it to the
splash, the empty image window and to session_restore() explicly.
build/win: Upgrade harfbuzz to 0.9.28
app: Fix build for windows.

This was broken in 7f23fbec34bd5790f0fab41a0975beed2786b8d8
app: rename gimp_get_screen_resolution() to get_monitor_resolution()

Add a "monitor" parameter and return something reasonable, instead
of a useless resolution average of all the screen's monitors. Also
require a screen to be passed now.
app: pass the startup monitor to displays opened from the copmmand line

Change gimp_get_display_name() to also return the screen, and its
implementation in the GUI to return the initial monitor during
startup. Retrieve that information in app.c using a weird callback
construct and pass the monitor to file_open_from_command_line().

Half-related, add screen and monitor parameters to GimpDisplayShell
and use these initial values for calculating the canvas's initial
extents.

The image windows still don't position themselves correctly though
because we have no mechanism for that whatsoever just yet, but we now
at least pass the needed monitor information to the right objects.
Document that gimp_run_procedure* on error return a string.
Document other layer_group-relevant procedures in gimp_layer_group_new.