Movement works. yeeeeeeeee

Sorry for the monster commit, but there were a lot of cyclical
dependencies and I didn't want to commit anything until it was all
working. The last few commits I made were isolated commits that I wanted
to fix immediately because they were silly mistakes.