Bcolz loads into memory

If a result is less than a gigabyte then just shove it into a numpy array (which will, in turn, shove things into `DataFrame`s if necessary).

cc @jreback @cpcloud 

Builds off of #721.  So this PR should become a lot simpler once that's merged.
This is the bcolz compute layer.  So `data` in this case is a `bcolz.ctable` (see the `dispatch` signature above).  by saying `data[:]` we're activating bcolz code that brings that data into memory, specifically as a numpy array. 

In many cases computations on numpy arrays then coerce those arrays into `DataFrame`s.  So in a roundabout way, this is taking narrow parts of wide bcolz arrays and putting them into Pandas `DataFrame`s to do the actual execution.

This is a Pandas+BColz hybrid that stores things in bcolz but operates in-memory without chunking when possible.