Performance improvements for gc interaction code

On my elementwise-op-heavy test code, the previous implementation of value
registration resulted in about a 30-35% slowdown.

Changed the registration methods so that they all use the nm_gc_holder struct
scheme, and changed this to hold a pointer and a count rather than the value
itself. This allows arrays of VALUEs to be marked with only a single allocation
rather than one per value (as was happening with rb_gc_register_address calls).
Also implemented object pooling for the nm_gc_holder structs so that these get
reused when a VALUE is unregistered.  (Memory allocation was previously the
bottleneck here, and pooling avoids that.)

Slowdown is now approximately 5%.  Still needs to be tested on other operations
to make sure there aren't unacceptable slowdowns elsewhere.