Support debouncing both functions that do and don't return Promises.

- Rework implementation so that Promises returned from a debounced
  function are resolved when it's time to execute the function
  (rather than in reverse).
- Silently drop unfulfilled Promises (never resolve them) that were
  returned from calls made during the bouncing period.
- Test "immediate" flag asynchronously to comply with async
  resolution of Promises.
- A future change may involve actually rejecting previous Promises
  that occurred during the bouncing period; however, this may
  actually not be all that useful in the common case and instead
  cause more annoyance with dealing with errors.