changing camera objects to store data instead of render functions
re-reverted GameObject to being a self-contained recursive data type