Nicer events

This supports much nicer event callbacks which are easy to consume. As well, gesture accumulation is supported to fix skipped gestures events as the two loops are out of sync.