handle joystick input better

This was developed using SDL input and my Logitech RumblePad 2 USB
controller which looks and feels a lot like a PlayStation DualShock
controller. Time will tell how other controllers behave with this
code.
refine the digital axis handling

And make GetUserInput handle directional repeat more sanely.