Cleanup platform logic.

This is probably as good as it gets for now. There's still a bit of evil
left in this implementation, such as:
- Setting the platform handle to NULL when jumping. The other reason
this is a problem is because yVel is set, rather than added to, when
adjusting height due to being on a platform. This effectively resets the
jump.
- Functionality being split across both Platform.cpp and Player.cpp
- Having to check whether yVel < 0 to prevent pop-through