[Mac] OpenGL 3.x/4.x require core profile flag

SDL will fail to construct an OpenGL 3.x/4.x context on Mac OS X,
unless ContextProfileFlags.CORE is specified.

Fixes issue #44

Upstream enhancement request at
https://bugzilla.libsdl.org/show_bug.cgi?id=2342
[Win] More robust WGL extension detection

Affects issue #42 and issue #45
[Win] More robust pixel format selection

This patch adds more robust checks for WGL_ARB_pixel_format and
WGL_ARB_multisample before using the relevant extensions, and adds
checks whether Wgl.Arb.ChoosePixelFormat() returns a valid pixel format
before trying to use it (thanks to Repetier for catching this edge
case.)

Additionally, the ChoosePixelFormatPFD code-path now heavily penalizes
single-buffered modes when the user requests a double-buffered mode.

Affects issues #42 and #45
[SDL2] Implemented GetWindowWMInfo
[OpenTK] Fixed Utilities.CreateSdl2WindowInfo

Utilities.CreateSdl2WindowInfo should store the specified windowHandle
directly instead of trying to call SDL.SDL.CreateWindowFrom.
[OpenTK] Frameskip needs TargetUpdateFrequency!=0
[OpenTK] Fix UpdateFrame loop condition

Multiple UpdateFrame events should be raised to match the desired
TargetUpdateFrequency, when TargetUpdateFrequency > 0. The loop would
incorrectly check for TargetRenderFrequency instead.

Affects issue #43
[Audio] Don't crash when Alc.GetString() returns null

Alc.GetString() could crash if the unmanaged code returned null due to
any kind of failure. This is now fixed and better documented.

Additionally, the array overload for Alc.GetString() will now correctly
forward the ‘device’ parameter to unmanaged code.
[OpenTK] Simplified update and render loops
[OpenTK] Remove Thread.Sleep() from loop timing
[OpenTK] Fix UpdateFrame quantization error

The UpdateFrame event rate will now match TargetUpdatePeriod even if
vsync is enabled. Previously, it would be quantized to a multiple or
integer fraction of of the vsync rate.
[Examples] Improved timing display

GameWindowStates will now display the average fps and draw three moving
boxes based on different timing methods.

If the timing implementation in OpenTK is working correctly, all three
boxes should be moving at the same speed.
[OpenTK] Respect a TargetUpdatePeriod of zero
[OpenTK] Do not hang when update rate too high

OpenTK will now detect when an UpdateFrame handler is consistently
taking too long to finish, and stop raising UpdateFrame events. This
gives ProcessEvents() a chance to execute and will protect the
application from hanging up.
[OpenTK] Increase max Update/RenderFrame rates

Given the new 144Hz monitors on the market today, it makes sense to
increase the Update/RenderFrame limit from 200Hz to 500Hz.
Merge branch 'issue43_unstablefps' into develop
Merge branch 'develop' into linux_joystick