Much safer as opposed to just returning raw allocated memory.
There's not a lot of point in passing these around or storing them (texture cache/state tracker mainly) as there will only ever be a single instance of the class. Also adds downcast helpers such as Vulkan::Renderer::GetInstance().
Adds headers where necessary to eliminate indirect includes. Also adds headers to ensure certain standard constructs always resolve correctly