Semi-functional jumping mechanic

Movement will work in 2 passes:

Pass 1: Updates for gravity
* Gravity is applied to the player
* If we are colliding with a wall we push the player either up or down
according to their velocity

Pass 2: Updates for player input
* We process left or right movement from keypresses
* if we are colliding with a wall we push the player left or right
accordingly

This creates a situation where we are testing wall collision twice in an
update tick. This is probably fine for fast AABB rectangle collisions
but probably won't work if something more complex is attempted.