leveldb: Improvements and some bugfix in compaction code

- Split mem and table compaction into two goroutine
- CompactRange now also flush the memdb if it's within range
- Fix (*DB).flush that return invalid memdb free bytes
leveldb: Limit compaction range

Limit compaction range such that it won't generate too many table in
the next level. The target is one table.

This limit doesn't apply to level-0, since level-0 can overlaps.
leveldb: Refuse to open DB if at least one table file were missing
levledb: Add exponential backoff to compaction transact
storage: FileType.String: Include type number of unknown file type
testutil/storage: Add typeTemp
leveldb: Add TestDb_LeveldbIssue200 testing
storage: file: Also sync parent directory if file type is manifest

See: https://code.google.com/p/leveldb/issues/detail?id=190.