Completed a variety of tasks

- Extend some classes
- Abstracted some classes to restrict access
- Shared interfaces using polymorphisms
- Overrode methods accordingly for each address type
- Played around with cloning and object referencing
- Leveraged standard class objects and customized error handling