Finish vertical camera update functionality.

This includes:
- Only centering vertically when on ground
- Only updating vertically at all when at camera top/bottom margin

The last issue is that the latter implemention is pretty jarring when it
updates. It needs to do this update over a few frames, maybe for half a
second.