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.

@chrisdickinson I was actually thinking that it's possible to avoid object creation at all in `for..of`. Unfortunately, iterators can be consumed directly and it's possible to mutate result objects:

```javascript
var b = new Buffer(255);

for (var i = 0; i < 255; i++)
  b[i] = i;

var it = b[Symbol.iterator](), r;

while ((r = it.next()) && !r.done)
  r.result = Math.floor(Math.random() * 255);
```