Dict encoding

** not ready for merge **

Just sending this out for information value.

This is a naive implementation of dictionary encoding, which stores the dict inside a column  on a per-page basis (not per block or per file, as discussed). It does turn off automatically if compression isn't yielding good enough results. 

Even with this (suboptimal) implementation, I see 18% storage savings on a sample (twitter internal) data file, prior to lzo compression.

Also fixed a couple of issues in the hadoop layer.