ENG-4806: Dynamically grow snapshot buffer pool

- Dynamically grow snapshot buffer pool to satisfy join stream snapshot needs

- Allocate buffers at the beginning of each snapshot and empty the buffer pool at the end of each snapshot, so that without snapshot the system doesn't use memory for snapshot buffers.