storage: Revise storage interface and improves its implementations

* This includes some changes related to the storage subsystem throughout the leveldb.
* ReadAt now replaced with Seek and Read instead.
* Rename, Size and Exist method are removed to simplify a storage implementation.
* Close method are now included in the Storage interface.
* GetFiles will also returns error.
* Print method renamed to Log.
leveldb: session: Renames print and printf to log and logf respectively
filter: Fixes documentations
opt: Remove RFDontCopyBuffer flag
Fixes documentation
storage: Adds logging for file closing and removal error
storage: Fixes logging deadlock
leveldb: sorted_test: Code cleanup and replace storage with bytes.Buffer for table buffer
leveldb: compaction: Fix table file that not get closed when ongoing compaction interupted by DB.Close
leveldb: compaction: Implements rollback for compaction transactions
storage: MemStorage: Allows file with same number but different type to coexist
leveldb: storage_test: Allows filesystem-backed storage used for testing

Use GOLEVELDB_USEFS=1 to enable filesystem-backed storage or GOLEVELDB_USEFS=2
to also prevent the test storage to be removed when test is done.
storage: FileStorage: Also scan pending CURRENT files
leveldb: DB.recoverJournal: Fixes file that not being closed if error occured
journal: Offload file closing task from journal writer
leveldb: TestStorage: Call CloseCheck before closing the storage
storage: fileStorage.SetManifest: File should closed first before renamed
leveldb: testing: Proper `wait compaction' code
leveldb: testing: Make sure the test exit cleanly when interrupted
storage: fileStorage: Shorter logging prefix