Move some Iterator parts into a new BaseIterator base class

See issue #17.
Implement low-level "raw iterator" API

Added a .raw_iterator() method to DB and Snapshot instances. The
RawIterator instance returned by .raw_iterator() mimics the C++ iterator
API provided by LevelDB. The API is almost a direct mapping, except for
some added error handling, which is required to avoid segfaults or other
aborts from within LevelDB.

See issue #17.
Improve performance by not using kwargs for internal API

By not using kwargs for internal API calls, the dict overhead incurred
by each call can be avoided. This results in a significant performance
gain in microbenchmarks measuring iterator and write batch construction
time.