WIP: compute on HDF5 with PyTables

closes #361

leaving projections the way i've implemented them for now:

see scopatz's description of the memory layout.

* https://github.com/PyTables/PyTables/issues/233
* https://github.com/PyTables/proposal/blob/master/column-wise-pytables.rst

- [x] sort based on pytables indexes
- [x] should sort always work? e.g., pytables only allows sorting on a single indexed column whereas numpy and pandas allow multiple columns
    - [x] either let users know they need to index, instead of reading into memory or just always work

punting to pytables on `Sort` for now so it will raise if you to sort on a column that doesn't have a completely sorted index

<!---
@huboard:{"order":374.8125,"milestone_order":487,"custom_state":""}
-->

i added a class here to be able to debug each reduction and follow the code path in a debugger slightly easier since i can run a single test from the command line.