AsyncTask: Improve continuous status feedback

One of the advantage of AsyncTask is that the background task can call
"_status_cb()" multiple times to report the interim progress. However
this is not properly implemented in "_status_cb()". The correct handling
should be as follow.

cb(message, True)
  Means task finished succesfully.

cb(message, False)
  Means task failed.

cb(message)
cb(message, None)
  Means task is ongoing and the invocation is to provide progress feedback.

The current implementation fails to distinguish "cb(message, False)" and
"cb(message)". This patch fixes the problem and adds a new test case.

This patch also extracts "wait_task()" methods in from the tests, adding a
regular status report to allow developer know it's waiting for some task
but not stuck on something. There is also two methods in tests that start a
AsyncTask but do not wait it till finish, this will interfere with other
tests, so the patch adds the missing "wait_task()" invocation for them.

v2:
  Extract the common "wait_task()" methods to avoid duplicated code.

Signed-off-by: Zhou Zheng Sheng <zhshzhou@linux.vnet.ibm.com>