buffer: implement `iterable` interface

This makes possible to use for..of loop with buffers. Also related keys, values and entries methods are added for feature parity with Uint8Array.

This is basically the code from v8 array iterator implementation minus spec stuff.

@othiym23 ah, I was thinking that each iterator could instantiate a single `BufferIteratorResult` and swap its value on `.next()` -- to avoid the problem of having to instantiate a whole new object just to add a `.done` parameter. Could you expand on the "reinventing smis, badly" bit? I'm afraid I don't follow.

@vkurchatkin In that these objects will probably only exist in the new-generation pool and be quickly GC'd, it's optimized, though it would still increase GC pressure (I think.) If we can get away it, I imagine only creating two objects per iteration (vs. N + 1) would be less expensive.