buffer: reimplement Buffer pools

This is an undesirable, but for the time necessary since small chunks
are still too slow. It will continue to be improved as alternatives are
discovered.

One important change to Buffer pools was that they are only allocated if
the requested chunk is < poolSize / 2. The fancy method used is
optimized for how v8 handles Smi's, and to make sure if a use sets
poolSize to an odd number the value won't overflow to a double. This
*does not* have a performance impact.