Rework PackIdx to avoid buffers which are reasonably heavyweight, and
will be even larger (as memoryviews) in python 3 (require ~200 bytes).
Instead, just use direct offsets into the underlying mmap -- slicing
an mmap currently just produces bytes.
Store the fanout table as a homogeneous array rather than a list or
tuple with individually allocated integers.
Instead of looking up hashes one at a time, traverse the index during
gc via its iterator.
Signed-off-by: Rob Browning <rlb@defaultvalue.org> Tested-by: Rob Browning <rlb@defaultvalue.org>