Make SqlBatchOperation transaction optional.

By moving BeginTransaction from SqlBulkInsertOperation to AbstractDatabaseOperation, and making it use DbTransaction instead on concrete SqlTransaction, it can be shared between SqlBulkInsertOperation and SqlBatchOperation, and others.