Transaction commit fix

#186 
- Add test for nested transaction
- Commit supports nested transaction, but may only commit transaction on top of the transaction stack
- Saves data to disk after every successful commit (commit that is not just merging transactions)
- Modify test cases to make use of the singleton
- No extra test cases for #171 yet (UPDATE: coming soon in another PR)
I'm confused here... Since all operations is already checked by query engine for its correctness, that means I should do an assert here instead of throwing exception, right? But that means rollback is no longer necessary as any failing commit is straight away being interrupted by the program crashing. Or is there something else that I understand wrongly here?