Provide more specific error messages

These commits change the error messages returned to the more specific messages returned by sqlite3_errmsg(conn) rather than the generic messages returned by stringifying the return values from sqlite3_* calls.

This makes SQL errors easier to debug - eg. 'table Foo already exists' instead of 'Logic error in SQL or missing database'.

This change could break existing clients that expect the returned Error type to be an int.