APR Quake 2 Vulkan renderer split

Files:
  vk_local.h
  vk_main.cpp
  vk_instance.cpp
  vk_surface.cpp
  vk_device.cpp
  vk_swapchain.cpp

Replace vk_local.h and vk_main.cpp, and add the four new .cpp files to the ref_vk/Q2 project.
Do NOT keep the old vk_main.cpp content.

Build configuration:
  x64 Debug (or the configuration you have been using)

This refactor preserves the current initialization sequence, but separates instance, surface, device, and swapchain responsibilities.
The swapchain diagnostic code is retained.

Version 1.0.8 glTF weapon materials (26 September 2026)
--------------------------------------------------
The Vulkan alias path now supports weapon metallic-roughness PBR, normal maps
and occlusion maps, including the Weapons inspection menu. See
WEAPON_MATERIALS.md for controls, the export profile, limitations and tests.
Included in the 1.0.8 release.

Version 1.0.21 cel outlines and particle controls (9 October 2026)
------------------------------------------------------------
OpenGL outline behavior is the reference: a configurable, default-black back-face wire contour
with distance fade, excluded for translucent/shell models. Vulkan has bounded
alias and GPU-pose outline pipeline variants reusing the existing streams,
materials and lifetimes. No CPU skinning fallback is needed for outlines.
fillModeNonSolid and wideLines are enabled only when supported; absent wide
lines fall back to width 1, absent non-solid fill disables outlines.
Particle scale/style/shape share generated pixels and size calculations with
OpenGL; three startup textures allow immediate shape changes without replacing
in-flight resources. Weather keeps its original texture. Square uses nearest
filtering. Standard particles use textured rendering on both backends.
Upstream reference: q2pro/q2pro 601a8df8433b0c50dbbe37c0716c3793fff140a7,
src/refresh/tess.c, texture.c, mesh.c and doc/client.asciidoc.

Version 1.0.21 outline color (9 October 2026)
----------------------------------------
gl_celshading_color "R G B" (0-255, default black) uses the shared OpenGL
parser. Vulkan stores RGB per alias/pose draw and uses existing material
push constants for the outline pass; pipeline and resource lifetime unchanged.

Unreleased console font startup (12 October 2026)
The shared OpenGL bootstrap tries a PNG console font if its PCX lookup fails,
independent of gl_replacepcx. This also prevents Vulkan startup from failing
before Vulkan initialization on PNG-only AQtion installs.
Vulkan also retries the font as PNG in its own picture loader and uses the same built-in palette as OpenGL when colormap.pcx is absent.
