WIP: Introduce basic input device grab infrastructure
Some protocols require establishing a keyboard/pointer/touch grab, but we don't have such api. For example, based on the type of dnd, either the wl_pointer or the wl_touch needs to be grabbed. Another example is xdg popup grabs.
Event filters are not good for this job because they are conceptually different.
This change introduces basic input device grab infrastructure, which is inspired by the one that can be found in weston.
If there is an event, the seat will forward the event to the grab. It is the responsibility of the grab to decide what should happen next to the event. The grab may decide to discard or forward the event.
The default pointer/touch/keyboard grab is active if the corresponding input device is not grabbed explicitly and it is created by the seat.
A grab can be superseded by another grab. If that happens, the cancel() hook will be called. It can be used to cancel drag-and-drop session or dismiss popups.
WIP as I still figure things out, plus it will be great to have a usage of the new api other than the default grab.