f2fs: introduce f2fs_issue_flush to avoid redundant flush issue

Some storage devices show relatively high latencies to complete
cache_flush commands, even though their normal IO speed is prettry much
high. In such the case, it needs to merge cache_flush commands as much
as possible to avoid issuing them redundantly. So, this patch introduces
a mount option, "-o flush_merge", to mitigate such the overhead. If this
option is enabled by user, F2FS merges the cache_flush commands and then
issues just one cache_flush on behalf of them. Once the single command
is finished, F2FS sends a completion signal to all the pending threads.
Note that, this option can be used under a workload consisting of very
intensive concurrent fsync calls, while the storage handles cache_flush
commands slowly. Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>