Joystick abstraction and XInput support

New joystick abstraction - make input handling separate from joystick APIs

This allows for APIs to coexist, such as DirectInput alongside XInput for full 360-like controller support. Multiple joysticks are supported. The current behavior is retained, where the most recent action across all controllers is repeated at a 0.1s delay.

The second commit adds XInput joystick support. This lets XBMC support all 360-like XInput-compatible controllers out of the box using the Xbox 360 keymap, regardless of controller name.