BATCH-2240 Call ItemStream open() and close() within a transaction

* Modify TaskletStep to call open() and write() of registered ItemStreams within a transaction
* Fix problem in TransactionAwareBufferedWriter where close callback was not being called if the transactional buffer was empty