use setImmediate in peek

this fixes a bug where I was destroying things in the callback of a peek() which was mistakenly causing the peek error event to get called