- reduce scope of raw pointers
   - move dbh, stmt types to ffi
   - combine open and database_with_handle into Database::new
   - move cursor_with_statement to Cursor::new
   - dbh not needed in struct Cursor
 - expose prepare offset
 - never mind _tail arg on prepare()
 - add (failing, ignored) safety tests
   - TODO: split test commit from the rest
Database::exec has only one successful outcome, so use () rather than bool
query module with current API tests and work toward using Encodeable
encoder compiles (though it's full of TODOs)
use sum type (SqliteResult<()>) to distinguis SQLITE_OK from error codes
  - use from_uint to convert FFI return values (c_int) to enum values
    - factor out check(); never mind query::res()
 - step() -> Result<ResultStep, ResultError>
 - in step_row(), use match rather than if
   - TODO: fix indentation?
 - clear_bindings(), set_busy_timeout() have no error conditions,
   so assert! that the FFI gave OK, return ()
   - TODO: test
 - in bind_params, use .enumerate() rather than mut i
 - in exec(), use check() rather than mut r
 - use sqlite3_close_v2, which is designed for async finalization
   - hmm... over-kill?
 - avoid StaticText() as its use of with_c_string is buggy