Added component superclass

Closes #41
Merge branch 'components'