Support nested transactions

Added support for nested transactions (#1) the same way as the Android's SQLiteDatabase does. When the outer transaction (root transaction) is ended of the work done in that transaction, all of the nested transactios will be commited or rolled back. The changes will be rooled back if any transaction is ended without calling setTransactionSuccessful method. Otherwise they will be committed. The storage engine ensures that a connection to the database will be held for the thread until all of the nested transactions are ended.