faster block allocator, by dividing the free list into buckets