Refactor out copied movement code.  Add flight mode.

This is the start of making the KinematicCharacterMover easier to understand.  And I thought while I was at it, I may as well exploit the ability to do ghost mode *with* collision.