Add debug_once to util/warnings

This function provides debounced logging for `Puppet.debug` similar to
`notice_once` and `warnonce`.
(#21835) Downgrade missing type optimization warn

For some catalogs, enabling `ignoremissingtypes` can produce a lot of noise in
the logs. This change downgrades the warning to a debug message and debounces
the logger so that messages appear only once per missing class or definition.
Merge pull request #1820 from Sharpie/21835-silence-ignoremissingtypes

(#21835) Remove missing type optimization warning