Refactoring camera code

GUI.java was getting a long and had too much camera logic that was being repeated. I pulled out as much as I could and put it in `CustomCamera`. So now when you want to move a camera, you reset its location and rotation and call `applyChangesTo()` to have the changes rendered in the camera's corresponding camera container.

In addition to cleaning up GUI.java, this will make it easier to write tests for camera movement features.

I also created a class called Vector3d so we don't have to worry about including the actual Vector3d jar file. After all we're really just using it to store a couple doubles.