Operation: buffer

This was quite a big one, but I've managed to implement all buffer operations as referenced in issue #16. For convenience I've opted to make `BufferClosing` and `BufferOpening` interfaces, and provided simple implementations in `BufferClosings` and `BufferOpenings`. 

As always, **feedback is welcome!**