BufferedTupleStream: allow interleaved reads/writes and return rows FIFO

Adds support to read from the BufferedTupleStream before all rows have been
added. To do this, at least two pinned buffers may be needed so the c'tor
takes a parameter to indicate if this behavior is enabled.

The stream will also now return rows in the order in which they were inserted.
Instead of maintaining separate lists of pinned and unpinned blocks, we just
keep a single list to easily maintain the FIFO ordering.

This also attempts to clarify the buffer management configuration by separating
pinning behavior from PrepareForRead() and the delete-on-read behavior. Now
pinning is set with Pin()/Unpin() (not PrepareForRead()/Unpin()) and there is
a separate c'tor parameter to specify if blocks should be deleted after reading.

Change-Id: Ic7628ff13ad4329461de0742c80cd91d1f385089
Reviewed-on: http://gerrit.sjc.cloudera.com:8080/3785
Reviewed-by: Matthew Jacobs <mj@cloudera.com>
Tested-by: jenkins