Initialization
This section deals with initialization of all the systems needed, including:
- Initializing GLFW and creating a Window
 - Creating a Vulkan Instance
 - Creating a Vulkan Surface
 - Selecting a Vulkan Physical Device
 - Creating a Vulkan logical Device
 - Creating a Vulkan Swapchain
 
If any step here fails, it is a fatal error as we can't do anything meaningful beyond that point.