Remember DisplayDevice original resolutions

When refreshing the AvailableDevices list, it is important to set the
original resolution on any DisplayDevices that were previously available
to allow the RestoreResolution() method to work correctly.
Change original_resolution field to a property

As the original_resolution field needs to be accessed from outside the
module, it should be an internal property as opposed to an internal
field
[Input] Corrected GamePadState range to byte [0,255]
[GLControl] Clarified docs regarding multiple contexts
[GLControl] Use IGraphicsContext.SwapInterval to get/set vsync

This patch fixes warnings related to the deprecated
IGraphicsContext.VSync property.
[GLControl] Warn when accessing GL properties on non-current context
Merge remote-tracking branch 'cwassall/develop' into develop
[Input] Added support for JoystickButtons 16-31
[Input] Implemented axis-button mappings
[Win] Faster WinMM GetCapabilities() and GetState()

joyGetDevCaps() is an extremely slow call that allocates memory.
WinMMJoystick is now caching its results for a significant speedup in
Joystick.GetCapabilities() and GetState().

The cache is updated whenever a joystick device is removed. WIP to
handle device added notifications.
[Examples] Updated to use 1.1 API
[Examples] BindAttribLocation must precede LinkProgram
[Input] Fixed off-by-one error in internal max axes/buttons
[Input] Added structures for joystick hat input
[Input] Added JoystickHatState structure
[Input] Do not use a bitfield for hat position

Using a bitfield does not save storage space in this case, and also
stops pattern matching from working (switch() statement in C# or match
… with expressions in F#.)
[Input] Added hat state to JoystickState
[SDL2] Implemented support for hat state
[Input] Added JoystickCapabilities.HatCount
[Mac] Implemented JoystickHat support