Move Database.LevelDB.Base to Database.LevelDB.C
Create low-level API without MonadResource context

This commit introduces Database.LevelDB.Base, which is similar to the
Database.LevelDB API, but without using resourcet/MonadResource and
using plain MonadIO instead.

The API of Database.LevelDB is kept as-is (the module now mostly
re-exports functions from Database.LevelDB.Base with some extra type
restrictions, i.e. MonadResource m).
Refactor iterKey & iterValue

This commit lifts the common code from iterKey and iterValue.
Merge remote-tracking branch 'nicolast/less-resourcet'

Conflicts:
	src/Database/LevelDB.hs
Drop record syntax for Iterator
Free options after handle

Probably not an issue, but not sure about scheduling semantics.
Don't use default-extensions + "stylish-haskell"-style imports
Formatting
Fix Iterator locking

Actually, not sure why this works: shouldn't a nested 'withMVar' block?
Reorganize modules
Adjust ghc options
Move ResourceT API to it's own module
(Re-)introduce withSnapshot combinator in Base
Require external synchronization for iterator access

Reason is, we need to resort to IO for higher-order functions which defeats the
purpose of generalizing to MonadIO. Also, the semantics of nested withMVar
blocks is a bit unclear.
Add note about external synchronization