fix bug

if an adapter A originated buffer with value `AAAA` and then
adapter B originates buffer with value `BBBB` and then adapter
A tries to originate buffer `AAAA` again it will cancel it
because @prev_buf still equals `AAAA`. this is a bug because
we only want to cancel origination if the new buffer value
is the same as the current "true" value of the adapter backend.

to fix this i improved the design by giving an Adapter a `last_buf`
property, so that both the OriginatesBuffers and ReceivesBuffers
modules can update and check a canonical value that represents the
"true" current value of the adapter backend.