Implement Gesture API

This is by no means complete, but it's a start.
These can all be `final` too, since they don't change after initialization.