windows/service: implement graceful shutdown when run as windows service
windows/service: implement graceful shutdown when run as windows service

- Fixes https://github.com/kubernetes/kubernetes/issues/72900
The issue here originally is that os.Exit() is called which exits
the process too early (before svc.Execute updates the status to stopped).
This is picked up as service error and leads to restarting,
if restart-on-fail is configured for the windows service.
svc.Execute already guarantees that the application is exited after,
so that os.Exit call would be unnecessary.

This rework also adds graceful shutdown, which also resolves the
underlying root cause. The graceful shutdown is not guaranteed
to succeed, since the service controller can decide to kill
the service any time after exceeding a shutdown timeout.

Kubernetes-commit: f243c8877978cf3d328c536b36cdf0ef5ca08a37

kubernetes/apiserver,kubernetes/apiserver