Write a file `uuid` in server's data directory that contains random UUID, generated at startup if file does not exist.

It will be used for several purposes:
- to anonymously identify server in Sentry (currently Sentry is unusable);
- (possible future usage) to identify server in ensemble.

@tavplubix comments?
LOG_INFO(log, "Closed all listening sockets. Waiting for {} outstanding connections.", current_connections);
        else
            LOG_INFO(log, "Closed all listening sockets.");
        if (current_connections > 0)
            current_connections = waitServersToFinish(*servers, config().getInt("shutdown_wait_unfinished", 5));
        if (current_connections)
            LOG_INFO(log, "Closed connections to Keeper. But {} remain. Probably some users cannot finish their connections after context shutdown.", current_connections);
        else
            LOG_INFO(log, "Closed connections to Keeper.");
        global_context->shutdownKeeperStorageDispatcher();
        
        server_pool.joinAll();
        /** Explicitly destroy Context. It is more convenient than in destructor of Server, because logger is still available.
          * At this moment, no one could own shared part of Context.
          */
        global_context.reset();
        shared_context.reset();
        LOG_DEBUG(log, "Destroyed global context.");
        if (current_connections)
        {
            LOG_INFO(log, "Will shutdown forcefully.");
            forceShutdown();
        }
    });
    buildLoggers(config(), logger());
    LOG_INFO(log, "Ready for connections.");
    waitForTerminationRequest();
    return Application::EXIT_OK;
}
void Keeper::logRevision() const