[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