Reduce kNet worker thread wait time for potentially less network latency.
Shader precaching mechanism. Call Graphics::BeginDumpShaders() or use the engine command line parameter -ds <file> to create a shader dump file of the variations that are loaded during program run, and Graphics::PrecacheShaders() to load the dump file.

Moved GetShader() from Renderer subsystem to Graphics, which is more logical as loading shaders is a low-level operation, while Renderer should be concerned with high-level rendering of 3D scenes. Now eg. UI does not need to depend on Renderer at all.

Simplified internal state of ShaderVariation & ShaderProgram objects, the success of compile/link can be deduced from the presence of a non-null GPU object.

Fixed FILE_READWRITE mode to not clear the file contents, and to handle alternating reads and writes correctly.