Added a lot of documentation to better explain some methods and purposes of certain classes.