Finished all but final two exercises, refactored a little throughout to reflect soluntions