fixed lua closure unpersistence. if an open upvalue that was already opened by the owning thread was read by a closure, the upvalue's value was set again, therefore closing the upvalue again.
So, it turns out I was a bit optimistic keeping the GC enabled while unpersisting just like that. I added some code taking care it won't get confused by incomplete objects. This is mostly trivial (setting stuff to null/nil in u_proto), but required some trickery in u_thread, to keep the GC from shrinking the thread's stack before it was complete. Luckily 'sweepthread' does one check before it runs; I exploit that by forcing that test to fail by setting the thread's stack field to null whenever calling code that might trigger the GC to run, and restore it afterwards. It's a bit hacky, something I had hoped to avoid, but not having the GC run while unpersisting is really not an option when generating paths.