Creates a debounced function that delays invoking func until after wait milliseconds have
elapsed since the last time the debounced function was invoked.
The debounced function comes with a cancel method to cancel delayed func invocations and a flush method to immediately invoke them.