LPS-44829 Add TerminationProcessException to identify process termination failure
LPS-44829 Refactor MPIHelperUtil from flatten SPIProvider/SPI Registry management to hierarchical management in order to avoid lock usage
LPS-44829 Refactor SPI shutdown hook to coordinate shutdown process with MPI.
1) In SPI shutdown hook, always tries to actively unregister itself from MPI.
2) If the unregister succeed, SPI takes control over its own shutdown procedure.
3) If the unregister failed(due a concurrent shutdown with MPI), SPI waits MPI to instruct its shutdown procedure, up to shutdown timeout setting in configuration.
4) If MPI instructs SPI to shutdown before timeout, this is just as if a reguler MPI initiated shutdown.
5) If SPI waiting times out(for either MPI died unexpectedly or just too slow to response), it will proceed with its own shutdown procedure.
6) If MPI was just too slow to response, it will notice SPI died unexpectedly later, then it will react with regular exception routine.
LPS-44829 MPI should consider SIGINT (kill -2) caused SPI shutdown as a peaceful shutdown.