Improve gamepad code.

- Make Gamepad an abstract class
- Add DualAction as a subclass of Gamepad
- Add methods for the rest of the buttons on the gamepad