[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.
What's more, if we really want to change it to a asynchronously deleting. Returning Future does still work. Just simply writing something like:
```scala
deleteFiles()
return Promise[Unit]().success(null).future
```