[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
[Compaction] Make RocksDB background Compaction pluggable.

Summary:
Make RocksDB background Compaction pluggable by Compactor and CompactorFactory.
Developers can simply set options.compaction_style = kCompactionStyleCustom
and options.compactor_factory.

This diff also include a test in utilities/compactor/compactor_test.cc,
which also contains a sample custom background compactor.

Test Plan:
make compactor_test
./compactor_test

Reviewers: igor, ljin, sdong, dhruba

Subscribers: leveldb

Differential Revision: https://reviews.facebook.net/D23421
[Compaction] SetupBottomMostLevel in FormCompaction

Summary:
SetupBottomMostLevel in FormCompaction