Cleanup how we handle compact_data in the scanners.

Previously compact_data meant two things and was very confusing.
  1) do the tuples from the scan-node need to be compact. i.e. does it need
     to copy all the referenced string data into a contiguous mem pool.
  2) do the tuples from the scan-node reference io buffers/buffer in the
     scanner context.

I've reworked the scanners to understand this better differentiate the two and
minimize copies. The new scanners should prefer
  1) reallocating new buffers > copying
  2) reusing (decompression/staging) buffers whenever possible

This patch allows scanners to be much more memory efficient reducing the minimum
memory needed from ~120mb to < 40mb.

Change-Id: I1e5af073be9497f8b00947769753b46629b29c3c
Reviewed-on: http://gerrit.ent.cloudera.com:8080/1927
Reviewed-by: Nong Li <nong@cloudera.com>
Tested-by: jenkins