extint: Add simple debounced event handling

Debounced events are only delivered after the specified timeout, ignoring
interrupts happening during that timeout. If the edge mode is rising or
falling, the event is delivered only if the pin settles into the desired
state (high or low). For both mode the event is always delivered after the
timeout regardless of what state the pin is in.

A practical example of usage is physical switches, which tend to have shaky
contact while operating from one position to another