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.

Wouldn't using flyweights here just be reinventing smis, badly? If you really wanted to do that, though, you could probably do it in the `BufferIteratorResult` constructor by having it return from a cache of previously-seen values. There's only 256 potential values when iterating via for..of, right?