Show executing SQL statement in long-running query log message

Also fix typo ("progess" -> "progress").  Refactor unit test, and add unit test coverage for log message.
                    fragmentId = ActivePlanRepository.getFragmentIdForPlanHash(planHash);
                    stmtText = ActivePlanRepository.getStmtTextForPlanHash(planHash);

Basically, it tries to get the FragInfo instead and return FragInfo's member fragmentId and stmtText. Get the FragInfo by its Hash should be efficient, but possibly the "synchronized" may make it a little bit difference. If you "synchronized" twice, is there any possibility that the fragmentId and stmtText are not correlated any more or the hashed plan get evicted during the second call? I understand it's really hard to hit this case.

As long as the performance is good to go, I have no fence.