Render 3D Event

This PR features Render3DEvent, both Pre and Post. It's situated wrapping the renderWorld call.

Pre is capable of canceling the 3D world render entirely. It's essential for special render passes and setting up pre-render variables, e.g. 3D shaders or stencil bits. The cancelation of this event is useful if you want to replace 3D render entirely, but keep the GUI.

Post has two uses: Destruction of values set up in Pre, and application of post-processing the rendered scene (e.g. reading out the front buffer or applying 2D shaders).
> I added a wasCanceled variable for Post.

I disagree about that many being stupid, since OGL is a state machine in which you need to reliably know your context, but the reason I dropped the thought is that I don't think it would make that much difference in this particular case.

As for the functionality - I outlined that in the original comment. This event specifically differentiates itself from the RenderWorldEvent by wrapping the actual world rendering rather than all rendering (2D and 3D). Most importantly, this is essential for all post-processing methods - as you can see, it aligns with Mojang's 2D shaders, whereas no other event does.