Handle diagonal collisions

After an extensive rewrite which did not work, I came across this:
http://cs.brown.edu/courses/cs195u/lectures/lecture5.pdf

Seems to work.

Next thing to check is walking up and down sloping surfaces methinks.