refactor HDFS state and it's tests

Refactor HDFS state and it's tests. Add CheckpointState as the super trait of it.

This first refactoring attempt is not changing any behavior of the origin HDFSState. The intention is to separate out the super trait, CheckpointState.

Also refactored the tests to remove code duplication.

I'm moving this to HDFSState.
So the checkpointPlanFailure method in HDFSState will just throw the err. It was in the there(CheckpointState) because previously we just wanted the job to fail if the planning failed, I guess. Isn't it the case?