Convenient methods for easier reading

Adds two simple convenience methods, `read` and `readMessage`, to make the following possible:

```js
var id, version, layerName;

pbf.read(function(tag) {
    if (tag === 1) name = pbf.readString();
    else if (tag === 2) version = pbf.readVarint();
    else if (tag === 3) pbf.readMessage(function(tag) {
        if (tag === 1) layerName = pbf.readString();
    });
    return result;
});
```

Compare that with the explicit approach:

```js
var id, version, layerName;

while (pbf.pos < pbf.length) {
    var val = pbf.readVarint(),
        tag = val >> 3,
        startPos = buf.pos;

    if (tag === 1) id = pbf.readString();
    else if (tag === 2) version = pbf.readVarint();
    else if (tag === 3) {
        var bytes = this.readVarint();
        while (pbf.pos < end) {
            var val = pbf.readVarint(),
                tag = val >> 3;
            if (tag === 1) layerName = pbf.readString();
            else this.skip(val);
        }
    } else this.skip(val);
}
```

Both methods accept a function for reading a field which get tag as an argument. Skipping tags is done automatically — if position didn't change after calling a function (which means there were no reads), we skip it. You can add explicit skipping though and it'll still work. cc @tmcw @springmeyer @kkaefer 

Needs tests before merging.