port gamepad API

Still haven't tested it. Preliminary thoughts?
i'm not sure either. i'd say merge this for now and create a new issue to track that