[joystick] Separate abstract joystick interface from logical joystick struct and code