Jumping with obstacle interaction works!

This was a lot of work. There are many little edge cases. I'm pretty
pleased with how it turned out.