demos: refactor components and integrate into build system
Major refactor of the demos/ directory, accomplishing a number of goals: 1. Allowing easy switching between OpenGL and Vulkan variants. 2. Supporting both GLFW and SDL2, chosen at compile time. The window management itself was made entirely modular for this purpose. 3. Refactor all of the demo programs atop these new abstractions. 4. Building them correctly and automatically (via meson). I also plan on factoring out the nuklear code to its own helper, but I avoided making that part of the same commit to prevent it from blowing up any further.