Starting work on weird collision issues
What is this mess

Right, I've worked out the problem. Whenever the block moves up, 'isPlayerOnTop' fails every other frame, meaning the player starts the frame already inside the block so movement is cancelled. What's causing 'isPlayerOnTop' to fail is beyond me, though. In the meantime, have a super hacky debuggy mess.
Nevermind I haven't a clue what's up
Seems to be fixed!

Right, the main change here is that if the block doesn't push the player enough, if gives it a little extra nudge. This seems to have fixed all issues, but it seems far too simple and I'm waiting for it all to come tumbling down.
Merge branch 'collision'

Fixes collision issues.