Redid all rotation to use quaternions. The camera now has the best bug I've ever come across. Rotate it around the z axis A LOT (aka look down A LOT) and see what happens when you don't normalize your quaternions. The next commit will have the fixed camera rotation code.