RFC: only allocate OpContet new_snapset when we modify it

@liewegas, Why should we re-initial the new_snapset? only for encode ?
Can should use the new_snapset diretctly? Bacause we don't modify it here.