break exercises out into an interface and inherited classes (resolves #11)