Added hack for MonoGame compatibility

MonoGame uses reflection to access internal APIs. We need to keep these
available until this is fixed downstream.
Improved diagnostics

This helps when tracking down GraphicsContext-related issues in SDL2.
GraphicsContext cannot be released by finalizer

On many/most platforms, GraphicsContexts can only be released by the
thread where they are current. This means that the user must call
GraphicsContext.Dispose() or risk a resource leak.

Since we cannot release contexts on the finalizer thread, we should keep
strong references, instead of weak references, until the user explicitly
calls Dispose().

This patch fixes issues with SDL2 crashing when running the MonoGame
WindowsGL test suite.
Use 16bit depth in GraphicsMode.Default

16bits appear to be better supported than 24bits on virtual machines.