Deoptimization for Dynamic Language JITs on Typed, Stack-based Virtual Machines