Don't poll auto-revert files that use notification (bug#35418)

It is a waste to periodically poll files that use change notification
in auto-revert mode; stop doing that.  If no files need polling,
turn off the periodic execution entirely to further avoid wasting power.
Use a timer to inhibit immediate reversion for some time after a
notification, for throttling.

This change does not apply to files in global-auto-revert-mode, where
polling is still necessary.  It is disabled by default, and enabled by
setting `auto-revert-avoid-polling' to non-nil.

* lisp/autorevert.el
(toplevel): Require cl-lib.
(auto-revert-avoid-polling, auto-revert--polled-buffers)
(auto-revert--need-polling-p, auto-revert--lockout-interval)
(auto-revert--lockout-timer, auto-revert--end-lockout): New.
(global-auto-revert-mode): Keep notifiers for buffers in auto-revert mode.
(auto-revert-set-timer): Use auto-revert--need-polling-p.
(auto-revert-notify-handler): Restart polling if notification stopped.
Use new lockout timer.
(auto-revert-buffers):
Use auto-revert--polled-buffers and auto-revert--need-polling-p.
(auto-revert-buffers-counter, auto-revert-buffers-counter-lockedout):
Remove.

* etc/NEWS (Changes in Specialized Modes and Packages):
Describe the new auto-revert-avoid-polling variable.

* doc/emacs/files.texi (Reverting):
Add paragraph describing auto-revert-avoid-polling.
2 jobs for master in 40 minutes and 30 seconds (queued for 5 seconds)
Status Job ID Name Coverage
  Test
failed #1586
test-all

00:40:30

failed #1587
test-filenotify-gio

00:26:08

 
Name Stage Failure
failed
test-all Test
Makefile:315: recipe for target 'check-doit' failed
make[2]: *** [check-doit] Error 2
make[2]: Leaving directory '/builds/emacs/emacs/test'
Makefile:290: recipe for target 'check-expensive' failed
make[1]: Leaving directory '/builds/emacs/emacs/test'
Makefile:963: recipe for target 'check-expensive' failed
make[1]: *** [check-expensive] Error 2
make: *** [check-expensive] Error 2
ERROR: Job failed: exit code 1
failed
test-filenotify-gio Test
In toplevel form:
lisp/autorevert-tests.el:28:1:Error: Symbol's function definition is void: auto-revert-set-timer
Makefile:165: recipe for target 'lisp/autorevert-tests.elc' failed
make[1]: *** [lisp/autorevert-tests.elc] Error 1
make[1]: Leaving directory '/builds/emacs/emacs/test'
Makefile:247: recipe for target 'lisp/autorevert-tests' failed
make: *** [lisp/autorevert-tests] Error 2
make: Leaving directory '/builds/emacs/emacs/test'
ERROR: Job failed: exit code 1