Fix the race condition between program stop and program status check and start.
- They should be using the same way to check if a program is running

Also some code refactoring to make the code cleaner
Plus a concurrency bug fix in getting program status for MR in workflow
Use future to carry the workflow client result instead.
fix checkstyle issue.
Cleanup code in ClassLoaders and usage of it to create ProgramClassLoader.
Remove the use of CombinedClassLoader for ProgramClassLoader.
Move ClassLoaders.creationProgramClassLoader to ProgramClassLoader.create. This keeps ClassLoaders class purely a generic util class.