main: Refactor how the compositor interacts with targets, the goal is to enable the compositor to render to destinations that isn't backed by a `VkSwapchain`. Introduce `comp_target` and remove `comp_window`, also refactor `vk_swapchain` to be a sub-class of `comp_target` named `comp_target_swapchain`, the window backends now sub class `comp_target_swapchain`.