add transaction support

`obs.transaction` support as per #6.

I have been using this implementation [inside observ-grid](https://github.com/mmckegg/observ-grid/blob/master/index.js#L16) for the last week, and seems to work effectively.

@Raynos do you think it's ready to merge into master? If not, it would be nice to at least merge https://github.com/Raynos/observ-array/commit/cb3889c99cf6ad569170849a58069dcd69dd34c7 which changes array._diff to be an array of multiple slice operations.

Another option would be to make it a separate module.