[Compaction] Make CompactFiles() work with level, universal, and FIFO compactions.

Summary:
Add SanitizeCompaction to CompactionPicker to allow different background
compaction strategies to sanitize CompactFiles() request.

CompactFiles() guarantees that all the specified files will be compacted
after the specified compaction has been successfully executed.  When the
current input files of CompactFiles() are not valid, SanitizeCompaction
may either reject this compaction or include more input files to the
current compaction.

Also, add unit tests for CompactFiles().

Test Plan:
develop test for both level and universal compaction in db_test

export ROCKSDB_TESTS=CompactFiles
./db_test

Reviewers: sdong, ljin, igor, dhruba

Subscribers: leveldb

Differential Revision: https://reviews.facebook.net/D23415