ar_shutdown_manager can now set the state of the system as running
or shutdown. When the system is in shutdown state, part of the
application should not be used, for example, no new connections
from the peer can be created, and no new timer interval can be
created.
ar_timer module should be used only on modules
trying to fetch data from remote peers. Indeed, some side
effects don't have an impact on the blocking during shutdown,
it seems the connections from the node to another peers are
blocking due to the shutdown.
ar_timer functions have been improved as well to support
extra-options, and define if the timer should be executed
or not during shutdown time with the flag skip_on_shutdown.
Improved logging when a process is shutting down. useful
to see where the application is blocking.
see: https://github.com/ArweaveTeam/arweave-dev/issues/915