final gc interaction additions

Found some final places where gc registrations were missing.

 - In checking whether a block was passed in RETURN_SIZED_ENUMERATOR, the ruby
   api is called.  This has now been split into two macros to allow insertion
   of unregistration code so that memory isn't leaked.

 - Most imporantly: GC can happen during Data_Wrap_Struct, so registrations
   have to be kept until after this call returns.  This was fixed throughout
   the code.

 - other miscellaneous locations where I'd missed a hidden ruby api call

 This no longer segfaults on my complex testing code.  Better sparse matrix
 stress testing is still needed.  I don't have any large programs lying around
 that use sparse matrices.