wrap data source use/unuse in transaction so we are sure of the unuse

extracted from #481 
I’d reword this. How about:

> Executes the given block, making sure that the datasources are available for the duration of the block.

Mentioning the “trouble” bit is unnecessary since it is clear enough that this method uses the idiomatic Ruby resource cleanup style.