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.

In my unscientific benchmarking, using a cache makes it about 15% faster.

Benchmark:

```javascript
var buf = Buffer(1 << 26), idx = 0;
buf.fill(0);  // Touch memory, force delayed allocation.
for (var b of buf) buf[idx++] = b;
```

Cache:

```diff
diff --git a/lib/buffer.js b/lib/buffer.js
index 9149b65..eb75761 100644
--- a/lib/buffer.js
+++ b/lib/buffer.js
@@ -969,6 +969,11 @@ function BufferIteratorResult(value, done) {
   this.done = done;
 }
 
+var cache = new Array(256);
+
+for (var i = 0; i < cache.length; i += 1)
+  cache[i] = new BufferIteratorResult(i, false);
+
 BufferIterator.prototype.next = function() {
   var buffer = this._buffer;
   var kind = this._kind;
@@ -980,7 +985,7 @@ BufferIterator.prototype.next = function() {
   this._index++;
 
   if (kind === ITERATOR_KIND_VALUES)
-    return new BufferIteratorResult(buffer[index], false);
+    return cache[buffer[index]];
 
   if (kind === ITERATOR_KIND_ENTRIES)
     return new BufferIteratorResult([index, buffer[index]], false);
```

Peak RSS and the number of page faults with that benchmark are consistently and repeatedly 2-3% lower so it makes sense that it's faster.

On a related topic, it would be good to add one or two benchmarks in benchmark/buffers/