Perf improvements for the in-memory sort

The changes in this patch are:
 i) Remove the use of GetTuple(index) in the core loop of the sorter
    and move to a more iterator-like access pattern.
ii) Change TupleRowComparator to use a vector<uint8_t> instead of
    vector<bool> for is_asc_ and nulls_first_.

On "Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz",
with 1 impalad, tpch_parquet, scale factor 1GB, disable_outermost_topn = 1,
all sorts in memory.

select l_orderkey from lineitem order by l_orderkey desc limit 1 : ~2.1 s
select l_comment from lineitem order by l_comment desc limit 1 : ~6.96 s
select * from lineitem order by l_comment desc limit 1 : ~11.7 s
select * from lineitem order by l_orderkey desc limit 1 : ~4.8 s

Change-Id: I4f82534d54e05552df972e464159e680bff6bcb4
Reviewed-on: http://gerrit.ent.cloudera.com:8080/3094
Reviewed-by: Srinath Shankar <sshankar@cloudera.com>
Tested-by: jenkins