Move camera into its own class

Still a few bugs to work out