[SPARK-4873][Streaming] WriteAheadLogBasedBlockHandler improvement

1. Move the block store work to a separate thread pool. IO work usually runs longer than CPU work. Running IO work in `Implicits.global` may block other work that want to run in `Implicits.global`.
2. Use `Future.zip` instead of `Future.flatMap`(for-loop). `zip` implies these two Futures will run concurrently, while `flatMap` usually means one Future depends on the other one.
3. Fix a unit test in `ReceivedBlockTrackerSuite` which may fail occasionally.
IMO, I prefer to also return `Future` for an asynchronous action. Returning `Unit` hides the asynchronous feature and such method will be misused easily.