Delta from patch 02:
1. Add a ScheduleResult interface to get the ListenableFuture and whether a new target check is added to ThrottledAsyncChecker. This way, the async callback will be called once per scheduled check.
2. Avoid cyclic volume check during volume check result handler, more specifically the BlockPoolSlice#saveDfsUsed() during volume shutdown.
3. Fix the unit test as the volume failure counter can be larger due to the async volume check and the fact that min-check-gap is set as 0 during certain test.