Fix potential deadlock because unlocking might GC

We might have to wait for a GC when unlocking the locked objects. This
also means we have to clear the call frame before that because it's not
valid anymore.
Always initialize RData

Even though we normally initialize in Data further, we want to
initialize this anyway so in the case there are bugs they don't show
themselves as impossible to debug, but as a more normal segv because of
a null pointer dereference.
Reset call frame before waiting

When we wait, we might GC and we have to make sure there isn't an old
call frame reference present at that point.
Assert that whenever we see a Data object it has a handle

Data objects should always have a handle, so when one doesn't that is a
bug.