Move deferred vblank events to separate drm_vblank_deferred list

It was still possible for nested xorg_list_for_each_entry_safe loops
to occur over the drm_vblank_signalled list, which could mess up that
list. Moving deferred events to a separate list allows processing the
drm_vblank_signalled list without xorg_list_for_each_entry_safe.

v2:
* Refactor drm_handle_vblank_signalled helper function, less code
  duplication => better readability (Alex Deucher)

Bugzilla: https://bugs.freedesktop.org/108600
Acked-by: Alex Deucher <alexander.deucher@amd.com>
11 jobs for amdgpu_drm_queue_alloc-is_flip in 3 minutes and 33 seconds (queued for 1 minute and 13 seconds)
Status Name Job ID Coverage
  Build
passed xserver-1.13 #45042

00:00:25

passed xserver-1.14 #45043

00:00:25

passed xserver-1.15 #45044

00:00:26

passed xserver-1.16 #45045

00:00:27

passed xserver-1.17 #45046

00:00:26

passed xserver-1.18 #45047

00:00:26

passed xserver-1.18-clang #45048

00:00:29

passed xserver-1.19 #45049

00:00:26

passed xserver-1.19-clang #45050

00:00:29

passed xserver-1.20 #45040

00:00:36

passed xserver-1.20-clang #45041

00:00:29