Implementa una funzione `debounce` che supporti una chiamata immediata all'inizio di una serie di eventi (`leading`), una chiamata trailing alla fine della serie per impostazione predefinita, e un metodo `debounceFunc.cancel()` per annullare la chiamata programmata.