Fix #5732 - Refactoring of exit code

The logic around exit code was extracted to new class. You can still
trigger exit using KafoConfigure.exit(code, &block) call. We also log
the exit code.
Fix #4959 and fix #3224

Log messages are buffered and log once again when Logger is setup. Also
we keep all errors and repeat them at the end if the process fails.