Fix memory leaks caused by bad finalizers

If a finalizer is passed a proc, and that proc has a reference to the object
that it is supposed to finalize, your objects will never get garbage
collected.

http://www.mikeperham.com/2010/02/24/the-trouble-with-ruby-finalizers/ talks
through some of this, but the high level is you end up with a reference chain
of:

    collection_of_finalizers -> proc -> object

That proc can't be collected because it's being held in the finalizer set, and
that proc references the object, so the object can't be collected.
Tag this as a special version