feat($debounce): add new service that "debounces" calls to a function

This is a useful service in general but, in particular, it also is needed
to support the `ng-model-options` directive, that allows users to "debounce"
the ui event triggers that update the ng-model value.

See #2129