NoSuitableGraphicsDeviceExceptions

I added NoSuitableGraphicsDeviceExceptions in a few spots.

- The first is just a replacment when using instancing (this just seemed right, but correct me if I'm wrong).
- The others were for the OGL version check as well framebuffer support based on the ProcAddresses
This Exception is a tough one for me to pull in, as it is largely an Arbitrary Failure Mechanism. I almost rank this as DRM, to be entirely honest.

For OpenGL, the version number is not as significant as, say, the versioning in Direct3D. While the GL compliance may not fully hit a specific version, the extensions that the driver/hardware supports may be enough to roll with what we need. For example, technically we should require OpenGL _3.1_, possibly even _3.2_, for all of the features that we use, but given the support for certain extensions like ARB_framebuffer_object or ARB_draw_instanced, we can finely tune exactly what hardware support is needed. This is why we have the stuff that exists in Framebuffer, and why I like that portion of the patch a whole lot more (though I guess if we're checking each entry point, checking the extension string isn't too helpful anymore...).

The part that kills it for me as a dev, not even a customer, is that this doesn't tell us what's really wrong. Why isn't the hardware 2.1-compliant? Is it a specific extension? Do we use that extension? Or what about the GLSL version? Or what if the version we received isn't correct (maybe the driver is dumb and gives us something like the GLX version instead)?

This is information we can gather by loading our own OpenGL entry points. If this is a dealbreaker for you, you'll want to lobby for that being made a higher priority instead.