Improve walking on ground and in air.

Most of the work here was improving the "in air" code. It's better than
before but still not quite right. I think part of the problem is that
right now Keen moves slower than he should, and that's easier to notice
in the air.

Split the code up so that the STOP code isn't in the same function as
the walking left/right code. That helped a lot. It might also be
beneficial to split up the "in air" case into its own function.