Added some base classes

Broke your project into some base classes. I didn't have time to implement everything, but you can see where I was heading.